前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >网络编程基础-Socket编程(使用socketserver实现一对多通信)

网络编程基础-Socket编程(使用socketserver实现一对多通信)

作者头像
小博测试成长之路
发布2021-07-29 14:48:11
7891
发布2021-07-29 14:48:11
举报

在前面的文章中,介绍过如果使用socket进行客户端与服务端的通信,接下来介绍socketserver模块,可用于多客户端与服务端通信。

由socket模块换成socketserver模块后,改动不大,主要是服务端的代码要进行改动,客户端的代码基本不用动。

服务端要继承BaseRequestHandler类。这个类在初始化的时候,它会依次调用3个方法。子类可以覆盖这些方法。BaseRequestHandler类中的3个方法对应的源码如下:

server端代码:

import socketserver


class mySocketServer(socketserver.BaseRequestHandler):

    def handle(self) -> None: # 每一次请求处理的时候执行
        while True:
            # 接收客户端数据
            client_data = str(self.request.recv(1024), encoding="utf-8")
            print("{} send:".format(self.client_address), client_data)
            if client_data in ['quit', 'exit']:
                print("connection lost")
                break
            # 发送数据
            send_data = input('请输入消息给' + client_data + ':')
            self.request.sendall(send_data.encode('utf-8'))
        self.request.close()

    def setup(self) -> None:  # 每一个连接初始化的时候执行
        print("before handle,连接建立:", self.client_address)

    def finish(self): # 每一个连接清理
        pass


ip_port = ("localhost", 9999)

server = socketserver.ThreadingTCPServer(ip_port, mySocketServer)
server.serve_forever()
#server.handle_request() #只接受一个客户端连接

client端代码:

import socket

ip_port = ('127.0.0.1', 9999)
# 1、创建socket对象
sk_obj = socket.socket()
# 2、连接服务端
sk_obj.connect(ip_port)
# 3、发送数据
while True:
    send_data = input('请输入要发送的数据:')
    sk_obj.sendall(send_data.encode('utf-8'))
    # 4、接收服务端数据
    server_data = sk_obj.recv(1024).decode('utf-8')
    if server_data is None or server_data == '':
        break
    print("接收到客户端的数据", server_data)
    # 5、关闭socket

sk_obj.close()

可以将client端的代码copy一份,命名为不同的文件名,然后一次启动server,client1,client2的脚本,就可以实现客户端和服务端的通信。并且在代码中加入循环后,就可以实现不停的对话,知道输入exit或者quit指令才会退出通信。

运行效果:

今天先简单介绍一下socket通信的基本操作,至于后面在测开的平台中如何去使用这些技术,敬请期待后面的分享,待我学会了之后继续为大家分享~

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-07-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 小博测试成长之路 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档