一、前言


使用Python可以很简单地创建一个TCP服务器程序,该TCP服务器的程序目的是完成这个功能:TCP客户端发送一段字符串给TCP服务端,TCP服务端将字符串原路返回去。

我是从该B站视频教程学习python的socket编程:
https://www.bilibili.com/video/BV1Xx411R743?spm_id_from=333.999.0.0

二、代码


import socketdef main():# 创建套接字tcp_Server_Sockettcp_Server_Socket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)# 绑定本地信息tcp_Server_Socket.bind(("",7890))# 套接字对象tcp_Server进入监听状态,等待TCP客户端建立链接,最大连接数为1tcp_Server_Socket.listen(1)while True:print("等待一个新的客户端的到来:")# 等待TCP客户端的连接new_Client_Socket,client_addr = tcp_Server_Socket.accept()print("一个新的客户端已经到来:%s" % str(client_addr))# 循环目的:为同一个客户端服务多次,直到客户端断开连接while True:# 进入阻塞态,等待TCP客户端发送字符串(最大1024个字节)过来recv_data = new_Client_Socket.recv(1024)# 打印信息到控制台print("客户端送过来的请求是: %s" % recv_data.decode("utf-8"))# 解除阻塞有两种情况:if recv_data:# 将数据发回去之前增加一个换行recv_data += "\n".encode("utf-8") # 将收到的字符串原路返回给TCP客户端 new_Client_Socket.sendall(recv_data)else:print(client_addr,"disconnected") # TCP客户端断开连接,打印信息。breaknew_Client_Socket.close()print("已经为客户端服务完毕.")tcp_Server_Socket.close() #可选,它永远不会被执行if __name__ == "__main__":main()

三、测试代码


3.1、网络调试助手mNetAssist

在ubuntu使用网络调试助手mNetAssist可以方便地测试socket程序,它可以充当TCP服务器,TCP客户端,UDP收发。


3.2、使用mNetAssist测试socket程序




接着,点击“连接网络”。TCP服务器检测到有TCP客户端连接过来,表示TCP服务器与TCP客户端建立连接成功,可以发送字符串了。

最后,使用网络调试助手(TCP客户端)发送一串字符串“Hello,World"给TCP服务器。TCP服务器接收到”Hello,World"之后,将"Hello,World返回给TCP客户端。


最后,TCP客户端断开连接。TCP服务器会继续等待下一个TCP客户端的连接。

此时,TCP客户端也可以再次连接TCP服务器。

至此,使用python3开发的TCP服务器程序完成。

四、socket程序阻塞的位置


先说明一下,new_Client_Socket.recv(1024)就是阻塞的位置。TCP服务器跟TCP客户端建立连接后,TCP服务器会马上进入接收的状态(阻塞),直到TCP客户端发送消息过来(解阻塞)才开始执行后续的程序。


Python | Socket01 - 创建一个TCP服务器(阻塞+单线程),将TCP客户端发过来的字符串原路返回相关推荐

  1. Python | Socket02 - 使用with语句建立一个TCP服务器(阻塞+单线程),将TCP客户端发过来的字符串原路返回

    一.前言 Python | Socket01 - 创建一个TCP服务器(阻塞+单线程),将TCP客户端发过来的字符串原路返回 在上一篇博文完成TCP服务器简单的收发程序后,发现在Python上有更加简 ...

  2. java实现tcp服务器(单线程、多线程)、客户端

    全栈工程师开发手册 (作者:栾鹏) java教程全解 java实现tcp服务器(单线程.多线程).客户端. 服务器端接收客户申请,响应时间戳和用户源字符串. 客户端使用控制台作为输入输出流 tcp服务 ...

  3. python ray定时_使用 Ray 用 15 行 Python 代码实现一个参数服务器

    使用 Ray 用 15 行 Python 代码实现一个参数服务器 参数服务器是很多机器学习应用的核心部分.其核心作用是存放机器学习模型的参数(如,神经网络的权重)和提供服务将参数传给客户端(客户端通常 ...

  4. 如何在 Python 中创建一个简单的神经网络

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 引言 在过去的几十年里,机器学习对世界产生了巨大的影响,而且它的普 ...

  5. python怎么创建列表_用Python将一个列表分割成小列表的实例讲解 Python 如何创建一个带小数的列表...

    python里有一个列表,列表里有几个小列表,小列表#冒泡排序:scoreList = [['a',98],['c',45],['b',70],['d',85],['h',85],['f',92],[ ...

  6. 十七、创建一个 WEB 服务器(一)

    1.Node.js 创建的第一个应用 var http=require("http") http.createServer(function (req,res) {res.writ ...

  7. python如何创建一个文件夹_利用Python怎么创建一个文件夹

    利用Python怎么创建一个文件夹 发布时间:2020-12-08 14:48:04 来源:亿速云 阅读:91 作者:Leah 这期内容当中小编将会给大家带来有关利用Python怎么创建一个文件夹,文 ...

  8. 使用Nodejs创建一个Web服务器应如何操作?以及路由相关知识了解

    文章目录 Nodejs创建一个Web服务器 Node.js创建第一个应用 Web服务器介绍 Nodejs创建一个Web服务器 路由 EJS模块引擎 Get.Post 获取GET传值 获取POST传值 ...

  9. 在python中创建一个具有特定大小的空列表

    本文翻译自:Create an empty list in python with certain size I want to create an empty list (or whatever i ...

最新文章

  1. Linux -nginx-源码安装
  2. JBPM使用assignHandler进行用户分派思路
  3. Client使用c#和odp.net连接server oracle
  4. 扩容是元素还是数组_348,数据结构1,数组
  5. struct和typedef struct在C与C++中用法
  6. python安全攻防---爬虫基础---BeautifulSoup解析
  7. wait(3) - Linux man page
  8. mysql启用keepalive_mysql主从之keepalive+MySQL高可用
  9. 可靠性测试设备技术含量_可靠性测试中心
  10. 好物推荐:眼科OCT影像自动分割工具推荐
  11. SpringBoot迷你天猫商城系统(附源码)
  12. 根据起始时间和结束时间得到期间所有的日期集合
  13. 我想做个读APPLE手机SN码的程序。
  14. 鸿蒙系统应用(HarmonyOS)2
  15. 软件测试周刊(第39期):我们必须全力以赴,同时又不抱持任何希望。
  16. ITU BT 601建议及与ITU BT656 的区别
  17. CVTE Java后台电话一面
  18. DD-WRT 的优点
  19. 【源码】声明32位和64位Access、Excel等VBA兼容的API函数的方法
  20. 聊聊Linux 五种IO模型

热门文章

  1. jQuery的$(document).ready()和JavaScript onload事件
  2. 让beanshell和bashshell一起工作
  3. 分享Silverlight/WPF/Windows Phone一周学习导读(11月14日-11月20日)
  4. JBPM与设计模式之职责链模式
  5. 调研了2000位CEO,67%的企业都在数字化转型,想做的无非这3点
  6. 扎金花游戏 PHP 实现代码之大小比赛
  7. 今天的虎兄才跳了过去的飞秋WZ132
  8. 【小点点】上架了他们的官方Windows 8应用
  9. 飞鸽传书写每行都认认真真
  10. 飞鸽传书也在2010年免费发布了