热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

python实现TCP服务器与多个客户端通信案例

1.TCP实现服务器端与多个客户端通信importsocketdefmain():#1.创建套接字sockettcp_server_socketsocket.socket(soc

 1.TCP实现服务器端与多个客户端通信

import socketdef main():# 1. 创建套接字sockettcp_server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)# 2. 绑定本地信息 bindtcp_server_socket.bind(("", 7890))# 3. 让默认的套接字由主动变为被动 listentcp_server_socket.listen(128)while True:print("等待一个新的客户端的到来...")# 4. 等待别人的电话到来(等待客户端的链接 accept)new_client_socket, client_addr = tcp_server_socket.accept()print("一个新的客户端已经到来%s" % str(client_addr))# 接收客户端发送过来的请求recv_data = new_client_socket.recv(1024) #注意这个1024byte,大小根据需求自己设置print("客户端福送过来的请求是:%s" % recv_data.decode("utf-8"))# 回送一部分数据给客户端new_client_socket.send("hahahghai-----ok-----".encode("utf-8"))# 关闭套接字# 关闭accept返回的套接字 意味着 不会在为这个客户端服务new_client_socket.close()print("已经服务器完毕。。。。")# 如果将监听套接字 关闭了,那么会导致 不能再次等待新客户端的到来,即xxxx.accept就会失败tcp_server_socket.close()if __name__ == "__main__":main()

2.TCP实现与多个客户端多次通信

import socketdef main():# 1.创建套接字 sockettcp_server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)# 2. 绑定本地信息 bindtcp_server_socket.bind(("", 7890))# 3. 让默认的套接字由主动变为被动 listentcp_server_socket.listen(128)# 循环目的:调用多次accept,从而为多个客户端服务while True:print("等待一个新的客户端的到来...")# 4. 等待别人的电话到来(等待客户端的链接 accept)new_client_socket, client_addr = tcp_server_socket.accept()print("一个新的客户端已经到来%s" % str(client_addr))# 循环目的: 为同一个客户端 服务多次while True:# 接收客户端发送过来的请求recv_data = new_client_socket.recv(1024)print("客户端福送过来的请求是:%s" % recv_data.decode("utf-8"))# 如果recv解堵塞,那么有2种方式:# 1. 客户端发送过来数据# 2. 客户端调用close导致而了 这里 recv解堵塞(客户端主动断开连接)if recv_data:# 回送一部分数据给客户端new_client_socket.send("hahahghai-----ok-----".encode("utf-8"))else:break# 关闭套接字# 关闭accept返回的套接字 意味着 不会在为这个客户端服务new_client_socket.close()print("已经为这个客户端服务完毕。。。。")# 如果将监听套接字 关闭了,那么会导致 不能再次等待新客户端的到来,即xxxx.accept就会失败tcp_server_socket.close()if __name__ == "__main__":main()

可以通过网络调试助手实现多个客户端同时与其通信,但是问题必须是一个个通信,排队。

统一声明:关于原创博客内容,可能会有部分内容参考自互联网,如有原创链接会声明引用;如找不到原创链接,在此声明如有侵权请联系删除哈。关于转载博客,如有原创链接会声明;如找不到原创链接,在此声明如有侵权请联系删除哈。 


推荐阅读
  • 本文介绍了解决Netty拆包粘包问题的一种方法——使用特殊结束符。在通讯过程中,客户端和服务器协商定义一个特殊的分隔符号,只要没有发送分隔符号,就代表一条数据没有结束。文章还提供了服务端的示例代码。 ... [详细]
  • 本文介绍了计算机网络的定义和通信流程,包括客户端编译文件、二进制转换、三层路由设备等。同时,还介绍了计算机网络中常用的关键词,如MAC地址和IP地址。 ... [详细]
  • Python瓦片图下载、合并、绘图、标记的代码示例
    本文提供了Python瓦片图下载、合并、绘图、标记的代码示例,包括下载代码、多线程下载、图像处理等功能。通过参考geoserver,使用PIL、cv2、numpy、gdal、osr等库实现了瓦片图的下载、合并、绘图和标记功能。代码示例详细介绍了各个功能的实现方法,供读者参考使用。 ... [详细]
  • 本文介绍了在Python3中如何使用选择文件对话框的格式打开和保存图片的方法。通过使用tkinter库中的filedialog模块的asksaveasfilename和askopenfilename函数,可以方便地选择要打开或保存的图片文件,并进行相关操作。具体的代码示例和操作步骤也被提供。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • http:my.oschina.netleejun2005blog136820刚看到群里又有同学在说HTTP协议下的Get请求参数长度是有大小限制的,最大不能超过XX ... [详细]
  • 本文介绍了RPC框架Thrift的安装环境变量配置与第一个实例,讲解了RPC的概念以及如何解决跨语言、c++客户端、web服务端、远程调用等需求。Thrift开发方便上手快,性能和稳定性也不错,适合初学者学习和使用。 ... [详细]
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
  • 关键词:Golang, Cookie, 跟踪位置, net/http/cookiejar, package main, golang.org/x/net/publicsuffix, io/ioutil, log, net/http, net/http/cookiejar ... [详细]
  • 个人学习使用:谨慎参考1Client类importcom.thoughtworks.gauge.Step;importcom.thoughtworks.gauge.T ... [详细]
  • WebSocket与Socket.io的理解
    WebSocketprotocol是HTML5一种新的协议。它的最大特点就是,服务器可以主动向客户端推送信息,客户端也可以主动向服务器发送信息,是真正的双向平等对话,属于服务器推送 ... [详细]
  • 本文介绍了在处理不规则数据时如何使用Python自动提取文本中的时间日期,包括使用dateutil.parser模块统一日期字符串格式和使用datefinder模块提取日期。同时,还介绍了一段使用正则表达式的代码,可以支持中文日期和一些特殊的时间识别,例如'2012年12月12日'、'3小时前'、'在2012/12/13哈哈'等。 ... [详细]
  • iOS超签签名服务器搭建及其优劣势
    本文介绍了搭建iOS超签签名服务器的原因和优势,包括不掉签、用户可以直接安装不需要信任、体验好等。同时也提到了超签的劣势,即一个证书只能安装100个,成本较高。文章还详细介绍了超签的实现原理,包括用户请求服务器安装mobileconfig文件、服务器调用苹果接口添加udid等步骤。最后,还提到了生成mobileconfig文件和导出AppleWorldwideDeveloperRelationsCertificationAuthority证书的方法。 ... [详细]
  • Java容器中的compareto方法排序原理解析
    本文从源码解析Java容器中的compareto方法的排序原理,讲解了在使用数组存储数据时的限制以及存储效率的问题。同时提到了Redis的五大数据结构和list、set等知识点,回忆了作者大学时代的Java学习经历。文章以作者做的思维导图作为目录,展示了整个讲解过程。 ... [详细]
  • 本文介绍了在mac环境下使用nginx配置nodejs代理服务器的步骤,包括安装nginx、创建目录和文件、配置代理的域名和日志记录等。 ... [详细]
author-avatar
萌星
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有