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

举报
小博测试成长之路 发表于 2022/01/15 00:19:57 2022/01/15
【摘要】 在前面的文章中,介绍过如果使用socket进行客户端与服务端的通信,接下来介绍socketserver模块,可用于多客户端与服务端通信。 由socket模块换成socketserver模块后,改动不大,主要是服务端的代码要进行改动,客户端的代码基本不用动。 服务端要继承BaseRequestHandler类。这个类在初始化...

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

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

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

server端代码:


   
  1. import socketserver
  2. class mySocketServer(socketserver.BaseRequestHandler):
  3. def handle(self) -> None: # 每一次请求处理的时候执行
  4. while True:
  5. # 接收客户端数据
  6. client_data = str(self.request.recv(1024), encoding="utf-8")
  7. print("{} send:".format(self.client_address), client_data)
  8. if client_data in ['quit', 'exit']:
  9. print("connection lost")
  10. break
  11. # 发送数据
  12. send_data = input('请输入消息给' + client_data + ':')
  13. self.request.sendall(send_data.encode('utf-8'))
  14. self.request.close()
  15. def setup(self) -> None: # 每一个连接初始化的时候执行
  16. print("before handle,连接建立:", self.client_address)
  17. def finish(self): # 每一个连接清理
  18. pass
  19. ip_port = ("localhost", 9999)
  20. server = socketserver.ThreadingTCPServer(ip_port, mySocketServer)
  21. server.serve_forever()
  22. #server.handle_request() #只接受一个客户端连接

client端代码:


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

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

运行效果:

今天先简单介绍一下socket通信的基本操作,至于后面在测开的平台中如何去使用这些技术,敬请期待后面的分享,待我学会了之后继续为大家分享~ 学习过程中遇到问题,可以加V:xiaobotester 一起探讨。

文章来源: xiaobotester.blog.csdn.net,作者:小博测试成长之路,版权归原作者所有,如需转载,请联系作者。

原文链接:xiaobotester.blog.csdn.net/article/details/118715740

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。