python Socket服务器转发

基于多线程
Server:

import socket
import threading

#接收数据
def recive(sock):
    while True:
        try:
            data = sock.recv(1024)
            print("Recive:{}".format(data.decode("utf-8")))

            T_trans=threading.Thread(target=broadcast_data,args=(sock, data,))
            T_trans.start()

            # sock.send(data)
            # sock.send("From Server:{}".format(data).encode("utf-8"))
        except:
            print(str(addr) + "---offLine!")
            CONNECTION_LIST.remove(sock)
            exit()

def handle_sock(sock, addr):

    #开线程接收客户端数据
    T_recive=threading.Thread(target=recive,args=(sock,))
    T_recive.start()

 #广播消息,若不在线删除
def broadcast_data(sock, message):
    for socket in CONNECTION_LIST:
        if  socket != sock:
            try:
                socket.send(message)
            except:
                socket.close()
                CONNECTION_LIST.remove(socket)


server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.bind(('localhost', 10086))
server.listen()
CONNECTION_LIST = []

#主线程循环接收客户端连接
while True:
    sock, addr = server.accept()
    CONNECTION_LIST.append(sock)
    print('Connect--{}'.format(addr))

    #连接成功后开一个线程用于处理客户端
    client_thread = threading.Thread(target=handle_sock, args=(sock, addr))
    client_thread.start()

Client:

import socket
import threading

#接收数据
def recive(client):
    while True:
        data = client.recv(1024)
        print("Recive:{}".format(data.decode("utf-8")))

#连接服务器
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client.connect(('localhost', 10086))

#开线程  用于接收数据
t_recive=threading.Thread(target=recive, args=(client,))
t_recive.start()

#主线程用于发送数据
while True:
    re_data = input()
    client.send(re_data.encode("utf-8"))
# client.close()

安卓Java端-接收:

package Socket;

import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.Socket;

public class client 
{
	public static void main(String[] args) throws Exception {
		Socket client=new Socket("106.12.194.69",10010);
        InputStream is = client.getInputStream();
        while(true){
        	BufferedReader br = new BufferedReader(new InputStreamReader(is));
            String mess = br.readLine();
            System.out.println("服务器:"+mess);
        }
	}
}

你可能感兴趣的:(Python,socket,python)