python3实现socket客户端通信demo

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_32502511/article/details/84791123

1.创建server.py文件作为服务端,代码如下:

#服务端
import socketserver

client_list=[]

class TCPHandler(socketserver.BaseRequestHandler):
    # 所有请求的交互都是在handle里执行的,
    def handle(self):
        while True:
            try:
                # 每一个请求都会实例化TCPHandler(socketserver.BaseRequestHandler):
                self.data = self.request.recv(80000).strip()
                client_ip=self.client_address[0]
                client_num=self.client_address[1]
                if client_num not in client_list:
                    client_list.append(client_num)
                print("来访客户端IP:{} 编号:{}".format(client_ip,client_num))
                print("客户端数据:",self.data.decode())
                #发送回客户端的数据
                self.request.sendall(self.data)
                print("-------当前在线客户端编号列表-----------")
                print(client_list)
            except ConnectionResetError as e:
                print("----断开的客户端------")
                print("客户端:{} 已经断开".format(client_num))
                #如果有客户端掉线,则将它从在线列表中删除
                client_list.remove(client_num)
                break

if __name__ == "__main__":
    HOST, PORT = "127.0.0.1", 9999
    server = socketserver.ThreadingTCPServer((HOST, PORT), TCPHandler)   #线程
    server.serve_forever()

2.创建client.py文件作为客户端,代码如下:

#客户端
import socket

class Client():

    def send_info(self):
        try:
            client = socket.socket() #定义协议类型,相当于生命socket类型,同时生成socket连接对象
            client.connect(('127.0.0.1',9999))
            while True:
                msg = input(">>>").strip()
                if len(msg) ==0:continue
                client.send(msg.encode("utf-8"))
                data = client.recv(1024)#这里是字节1k
                print("recv:>",data.decode())
            client.close()
        except ConnectionError as ex:
            print(ex)

if __name__ == "__main__":
    client=Client()
    client.send_info()

3.测试。启动服务端,运行server.py文件,如下图:

启动服务之后,我们可以将client.py多复制几份更改为不同的名字,模拟多个客户端。如我复制了两份,分别为client.py和client2.py,然后运行这个两个客户端文件。如下图:

启动客户端之后,可以在客户端输入文字内容发送到服务端,如下图,我在client输入 hello

切换到server端面板,如图:

可以看到,它已经收到了客户端1所发送的数据,并将它返回了回去,接着在client2中也输入文字内容,如图:

再次切换到server端面板,如图:

可以看到,在线客户端有两个了。

猜你喜欢

转载自blog.csdn.net/qq_32502511/article/details/84791123