Python 简单的多线程聊天澳门新葡亰赌995577

# client 端
import socket

ip_port = ('127.0.0.1', 8091)
sk = socket.socket()
sk.connect(ip_port)
print("客户端启动: ")

while True:
    inp = input(">>>")
    sk.sendall(bytes(inp, "utf8"))
    if inp == 'exit':
        break
    server_response = sk.recv(1024)
    print(str(server_response, "utf8"))
sk.close()


# server 端
import socketserver

class MyServer(socketserver.BaseRequestHandler):

    def handle(self):
        print("服务器启动...")
        while True:
            conn = self.request
            print(self.client_address)
            while True:
                client_data = conn.recv(1024)
                print(str(client_data, "utf8"))
                print("waiting...")
                server_response = input(">>>")
                conn.sendall(bytes(server_response, "utf8"))
            conn.close()

if __name__ == '__main__':
    server = socketserver.ThreadingTCPServer(('127.0.0.1',8091), MyServer)
    server.serve_forever()   # 这里会执行 handle 方法,所以 handle 方法里是编写程序逻辑。

简介

SocketServer是python的一个网络服务器框架,可以减少开发人员编写网络服务器程序的工作量。

澳门新葡亰赌995577,SocketServer总共有4个server基类。

TCPServer:负责处理TCP协议。

UDPServer:负责处理UDP协议。

UnixStreamServer:只适用于类unix平台,不常用。

UnixDatagramServer:只适用于类unix平台,不常用。

这4个类会同步处理每一个request,也就是说只有当前的request处理完才会处理下一个request,这种方式显然很不合理,如果当前的request处理过慢的话就会导致“堵塞”。正确的处理方式应该是开辟新的进程或线程去处理不同的request,通过混合继承ForkingMixIn或ThreadingMixIn类即可解决此问题。