单个服务端:
import socket #导入socket模块 import threading #导入threading模块 serversockent=socket.socket(socket.AF_INET,socket.SOCK_STREAM) serversockent.bind(("172.16.0.161",9999)) #绑定服务器地址和端口号 print("服务器以等待") serversockent.listen(5) #最多同时接收5个 print("最多同时连接5个客户") c=serversockent.accept() #接收客户端的连接,此c是元祖,表示得到的客户端 print(c) def myrerv(c): while True: msg=c[0].recv(1024) #接收消息 print(msg.decode()) threading._start_new_thread(myrerv,(c)) def myinput(): while True: msg=input() c[0].send(msg.encode()) threading._start_new_thread(myinput())
客户端:
import socket #导入socket模块 import threading #导入threading模块 s=socket.socket(socket.AF_INET,socket.SOCK_STREAM) s.connect(("172.16.0.161",6666)) # 连接服务,指定主机和端口 print("客户端已连接") def myrerv(c): while True: msg=c.recv(1024) #接收消息 print(msg.decode()) threading._start_new_thread(myrerv,(s,)) def myinput(): while True: msg=input() s.send(msg.encode()) threading._start_new_thread(myinput())群聊服务端:
import socket #导入模块 import threading serversocket=socket.socket(socket.AF_INET,socket.SOCK_STREAM) serversocket.bind(("172.16.0.161",6666))#绑定服务地址和端口号 print("服务器已等待") serversocket.listen(5) #最多同时接收5个 msg=None #定义一个全局的变量,用来存储聊天信息,临时存储当前抢到线程的数据 lock=threading.Lock() mythread=threading.Condition(lock) def server_recv(c,a): global msg while True: mystr=c.recv(1024) mythread.acquire() #线程同步 msg = str(a) + mystr.decode() print(msg) mythread.notify_all() mythread.release() def server_send(c,a): global msg while True: mythread.acquire() mythread.wait() mythread.release() c.send(msg.encode()) print(msg) while True: c,a=serversocket.accept() threading._start_new_thread(server_recv,(c,a)) threading._start_new_thread(server_send,(c,a))