Python | Socket01 - 创建一个TCP服务器(阻塞+单线程),将TCP客户端发过来的字符串原路返回
一、前言
使用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客户端发过来的字符串原路返回相关推荐
- Python | Socket02 - 使用with语句建立一个TCP服务器(阻塞+单线程),将TCP客户端发过来的字符串原路返回
一.前言 Python | Socket01 - 创建一个TCP服务器(阻塞+单线程),将TCP客户端发过来的字符串原路返回 在上一篇博文完成TCP服务器简单的收发程序后,发现在Python上有更加简 ...
- java实现tcp服务器(单线程、多线程)、客户端
全栈工程师开发手册 (作者:栾鹏) java教程全解 java实现tcp服务器(单线程.多线程).客户端. 服务器端接收客户申请,响应时间戳和用户源字符串. 客户端使用控制台作为输入输出流 tcp服务 ...
- python ray定时_使用 Ray 用 15 行 Python 代码实现一个参数服务器
使用 Ray 用 15 行 Python 代码实现一个参数服务器 参数服务器是很多机器学习应用的核心部分.其核心作用是存放机器学习模型的参数(如,神经网络的权重)和提供服务将参数传给客户端(客户端通常 ...
- 如何在 Python 中创建一个简单的神经网络
点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 引言 在过去的几十年里,机器学习对世界产生了巨大的影响,而且它的普 ...
- python怎么创建列表_用Python将一个列表分割成小列表的实例讲解 Python 如何创建一个带小数的列表...
python里有一个列表,列表里有几个小列表,小列表#冒泡排序:scoreList = [['a',98],['c',45],['b',70],['d',85],['h',85],['f',92],[ ...
- 十七、创建一个 WEB 服务器(一)
1.Node.js 创建的第一个应用 var http=require("http") http.createServer(function (req,res) {res.writ ...
- python如何创建一个文件夹_利用Python怎么创建一个文件夹
利用Python怎么创建一个文件夹 发布时间:2020-12-08 14:48:04 来源:亿速云 阅读:91 作者:Leah 这期内容当中小编将会给大家带来有关利用Python怎么创建一个文件夹,文 ...
- 使用Nodejs创建一个Web服务器应如何操作?以及路由相关知识了解
文章目录 Nodejs创建一个Web服务器 Node.js创建第一个应用 Web服务器介绍 Nodejs创建一个Web服务器 路由 EJS模块引擎 Get.Post 获取GET传值 获取POST传值 ...
- 在python中创建一个具有特定大小的空列表
本文翻译自:Create an empty list in python with certain size I want to create an empty list (or whatever i ...
最新文章
- Linux -nginx-源码安装
- JBPM使用assignHandler进行用户分派思路
- Client使用c#和odp.net连接server oracle
- 扩容是元素还是数组_348,数据结构1,数组
- struct和typedef struct在C与C++中用法
- python安全攻防---爬虫基础---BeautifulSoup解析
- wait(3) - Linux man page
- mysql启用keepalive_mysql主从之keepalive+MySQL高可用
- 可靠性测试设备技术含量_可靠性测试中心
- 好物推荐:眼科OCT影像自动分割工具推荐
- SpringBoot迷你天猫商城系统(附源码)
- 根据起始时间和结束时间得到期间所有的日期集合
- 我想做个读APPLE手机SN码的程序。
- 鸿蒙系统应用(HarmonyOS)2
- 软件测试周刊(第39期):我们必须全力以赴,同时又不抱持任何希望。
- ITU BT 601建议及与ITU BT656 的区别
- CVTE Java后台电话一面
- DD-WRT 的优点
- 【源码】声明32位和64位Access、Excel等VBA兼容的API函数的方法
- 聊聊Linux 五种IO模型
热门文章
- jQuery的$(document).ready()和JavaScript onload事件
- 让beanshell和bashshell一起工作
- 分享Silverlight/WPF/Windows Phone一周学习导读(11月14日-11月20日)
- JBPM与设计模式之职责链模式
- 调研了2000位CEO,67%的企业都在数字化转型,想做的无非这3点
- 扎金花游戏 PHP 实现代码之大小比赛
- 今天的虎兄才跳了过去的飞秋WZ132
- 【小点点】上架了他们的官方Windows 8应用
- 飞鸽传书写每行都认认真真
- 飞鸽传书也在2010年免费发布了