python之socket简易聊天器

mac2022-06-30  15

python基于tcp/ip协议的服务端(支持多个客户端同时连接处理)

代码如下:

1 import threading 2 import socket 3 4 5 class Server(object): 6 """服务端""" 7 8 def __init__(self): 9 self.server_socket = socket.socket(socket.AF_INET,socket.SOCK_STREAM) 10 self.Address = ("192.168.67.102",7890) 11 self.server_socket.bind(self.Address) 12 self.server_socket.listen(128) 13 self.clientsocket = dict() 14 self.count = 0 15 self.isrunning = dict() 16 17 def WaitClient(self): 18 while True: 19 print("正在等待客户端的连接......") 20 clientsocket,clientAddresss = self.server_socket.accept() 21 print("%s已经连接成功!" % str(clientAddresss)) 22 # print(clientsocket,clientAddresss) 23 self.count += 1 24 self.clientsocket[clientAddresss] = clientsocket 25 print("当前客户端连接个数为:%d" % self.clientsocket.__len__()) 26 self.isrunning[self.count]=True 27 print("集合中的元素为:%s" % str(self.isrunning.__len__())) 28 t = threading.Thread(target=self.RecvMsg,args = (clientsocket,clientAddresss,self.isrunning,self.count)) 29 t1 = threading.Thread(target=self.SendMsg,args=(clientsocket,clientAddresss,self.isrunning,self.count)) 30 t.start() 31 t1.start() 32 33 def RecvMsg(self,client,clientaddress,isrun,count): 34 if isrun[count] is True: 35 while True: 36 try: 37 recvmsg = client.recv(1024) 38 print("来自%s的消息为:%s" % (str(clientaddress),recvmsg.decode("utf-8"))) 39 except Exception as ret: 40 print("客户端%s已经离去!" % str(clientaddress)) 41 client.close() 42 isrun[count] = False 43 self.clientsocket.pop(clientaddress) 44 break 45 else: 46 return 47 48 def SendMsg(self,client,clientAddresss,isrun,count): 49 while True: 50 sendstr = input("请输入你要发送的消息:") 51 if isrun[count] is True: # 先判断该客户端是否还在 52 if client: 53 client.send(sendstr.encode("utf-8")) 54 else: 55 isrun.pop(count) 56 return 57 58 59 60 def main(): 61 """测试函数""" 62 S = Server() 63 S.WaitClient() 64 65 if __name__ == '__main__': 66 main()

客户端代码如下:

import socket import threading class Client(object): """客户端""" def __init__(self): self.client_socket = socket.socket(socket.AF_INET,socket.SOCK_STREAM) self.Address = ("192.168.67.102",9090) self.client_socket.bind(self.Address) self.server_Address = ("192.168.67.102",7890) def ConnectionServer(self): print(self.client_socket) self.client_socket.connect(self.server_Address) print("连接成功!") t1 = threading.Thread(target=self.SendMsg) t2 = threading.Thread(target=self.RecvMsg) t1.start() t2.start() def RecvMsg(self): while True: recvstr = self.client_socket.recv(1024) print("接收到来自服务器的消息维为:%s" % recvstr.decode("utf-8")) def SendMsg(self): while True: sendstr = input("请输入你要发送的消息:") self.client_socket.send(sendstr.encode("utf-8")) def main(): """测试函数""" C = Client() C.ConnectionServer() if __name__ == '__main__': main()

 

转载于:https://www.cnblogs.com/yuanshuang-club/p/11541622.html

最新回复(0)