python tcp多客户端
tcp_server
from socket import * import threading address='127.0.0.1' #监听哪些网络 127.0.0.1是监听本机 0.0.0.0是监听整个网络 port=9999 #监听自己的哪个端口 buffsize=1024 #接收从客户端发来的数据的缓存区大小 s = socket(AF_INET, SOCK_STREAM) s.bind((address,port)) s.listen(2) #最大连接数 def tcplink(sock,addr): while True: recvdata=sock.recv(buffsize).decode('utf-8') if recvdata=='exit' or not recvdata: print(f"{addr} have leaved") break print(f"from {addr} revive {recvdata}") senddata=recvdata+'from sever' sock.send(senddata.encode()) sock.close() while True: clientsock,clientaddress=s.accept() print('connect from:',clientaddress) #传输数据都利用clientsock,和s无关 t=threading.Thread(target=tcplink,args=(clientsock,clientaddress)) #t为新创建的线程 t.start() s.close()
tcp_client
#!/usr/bin/python3 # -*-coding:utf-8 -*- from socket import * from time import ctime HOST = '127.0.0.1' #服务端ip PORT = 9999 #服务端端口号 BUFSIZ = 1024 ADDR = (HOST, PORT) tcpCliSock = socket(AF_INET, SOCK_STREAM) #创建socket对象 tcpCliSock.connect(ADDR) #连接服务器 while True: data = input('>>').strip() if not data: break tcpCliSock.send(data.encode('utf-8')) #发送消息 data = tcpCliSock.recv(BUFSIZ) #读取消息 if not data: break print(data.decode('utf-8')) tcpCliSock.close() #关闭客户端
现在先运行一个server,然后运行多个client,一个server同时可以接受多个客户端了
connect from: ('127.0.0.1', 56683) connect from: ('127.0.0.1', 56687) connect from: ('127.0.0.1', 56688) from ('127.0.0.1', 56683) revive client 1 from ('127.0.0.1', 56687) revive client 2 from ('127.0.0.1', 56688) revive client 3 ('127.0.0.1', 56688) have leaved ('127.0.0.1', 56687) have leaved ('127.0.0.1', 56683) have leaved