用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)    收藏  举报

导航