用socket实现TCP聊天室实例
TCP/IP SERVER端:
import socket import threading class ChatServer: def __init__(self, ip='127.0.0.1', port=2000): self.sock = socket.socket() self.clients = {} self.addr = (ip, port) self.event = threading.Event() def recv(self, so, ip, port): while not self.event.is_set(): data = so.recv(1024).decode() if data.strip() == '/quit': so.close() self.clients.pop((ip, port)) return for s in self.clients.values(): s.send('{}:{}\t\t{}'.format(ip, port, data).encode()) def accept(self): while not self.event.is_set(): so, (ip, port) = self.sock.accept() self.clients[(ip, port)] = so threading.Thread(target=self.recv, name='clinet{}:{}'.format(ip, port), args=(so, ip ,port)).start() def start(self): self.sock.bind(self.addr) self.sock.listen() t = threading.Thread(target=self.accept, name='listen', daemon=True)
try: t.start() t.join() except KeyboardInterrupt: self.stop() def stop(self):
for addr,so in self.clients.items():
so.close()
self.clients.pop(addr)
self.sock.close()
self.event.set() if __name__ == '__main__': chat_server = ChatServer() chat_server.start()
TCP/IP CLIENT端:
import socket so = socket.socket() #创建socket实例 conn = so.connect(('127.0.0.1', 2000)) #连接到server
posted on 2014-04-23 18:32 myworldworld 阅读(208) 评论(0) 收藏 举报
浙公网安备 33010602011771号