socketserver实现多客户端与服务端交互就是用到了多线程,python
也帮我们提供了多线程模块threading,我们可以定义一个函数接收两个参数,一个与客户端的连接句柄,一个是客户端地址,函数内部执行与客户端的具体交互;外部使用socket
正常逻辑,执行到accept
时开启一个包含上述函数的线程,就是这么简单
服务器端:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
| import threading import socket
def interactives(conn, addr): print(addr, '成功连接服务器-----') while 1: try: ret = conn.recv(1024) back_ret = ret + ' Go Home'.encode('utf8') conn.send(back_ret) except Exception: break print(addr, '断开连接服务器-----') conn.close()
ip_port = ('10.10.10.103', 9999) server = socket.socket() server.bind(ip_port) server.listen(3) while 1: conn, addr = server.accept() t = threading.Thread(target=interactives, args=(conn, addr)) t.start() server.close()
|
客户端:
1 2 3 4 5 6 7 8 9 10
| import socket ip_port = ('10.10.10.103', 9999) client = socket.socket() client.connect(ip_port) while 1: name = input('输入姓名:').encode('utf8') client.send(name) ret = client.recv(1024).decode('utf8') print(ret) client.close()
|