python tcp框架_如何使用python建立TCP框架-程序员宅基地

技术标签: python tcp框架  

ca7f7b1edc44449a6993e4638b89e210.png

在学习了有关TCP的内容后,很多人对于这种编程的通信方式感兴趣,因为在应答和检验方便比较出色。结合我们最近在学习的python,可以在其中做一个TCP框架来使用。本篇我们就TCP的优点简单说明,对搭建框架步骤进行梳理,最后带来详细的搭建代码,下面一起来学习吧。

1、优点

(1)应答机制:TCP发送的每个报文段都必须得到接收方得应答才认为这个TCP报文段传输成功

(2)超时重发:发送端发出一个报文段之后,就启动定时器,如果在定时时间内没有收到应答就重新发送这个报文段

(3)错误校验:TCP会用一个校验的函数来检查数据是否有错误,在发送和接收的时候都会有校验

(4)流量管控和防阻塞管理:流量控制用来避免主机因为消息发送过快而来不及完全接受

2、搭建框架步骤

(1)导入模块

(2)创建套接字

(3)设置地址可以重用

(4)绑定端口

(5)设置监听,套接字由主动变为被动

(6)接收客户端连接

(7)接受客户端发送的信息

(8)解码数据并输出

(9)关闭和当前客户端的连接

3、实例# 1.导入模块

import socket

import threading

def recv_msg(new_tcp_socket, ip_port):

"""

接受信息的函数

:return:

"""

# 这个while可以不间断的接收客户端信息

while True:

# 7.接受客户端发送的信息

recv_data = new_tcp_socket.recv(1024)

if recv_data:

# 8.解码数据并输出

recv_text = recv_data.decode('gbk')

print('来自[%s]的信息:%s' % (str(ip_port), recv_text))

else:

break

# 关闭客户端连接

new_tcp_socket.close()

# 2.创建套接字

tcp_server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# 3.设置地址可以重用

tcp_server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, True)

# 4.绑定端口

tcp_server_socket.bind(("", 8080))

# 5.设置监听,套接字由主动变为被动

tcp_server_socket.listen(128)

# 用一个while True来接受多个客户端连接

while True:

# 6.接收客户端连接

new_tcp_socket, ip_port = tcp_server_socket.accept()

print('新用户[%s]连接' % str(ip_port))

# 创建线程

thread_msg = threading.Thread(target=recv_msg, args=(new_tcp_socket, ip_port))

# 子线程守护主线程

thread_msg.setDaemon(True)

# 启动线程

thread_msg.start()

# 调用接收函数

# recv_msg(new_tcp_socket, ip_port)

# tcp_server_socket.close()

以上就是使用python建立TCP框架的方法,大家可以进相关的搭建步骤进行学习,在对流程有一个明确后,再对搭建的代码部分展开练习。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_29940173/article/details/113964210

智能推荐

mysql .net core_.NET CORE 操作Mysql数据库例子-程序员宅基地

文章浏览阅读189次。首先要添加Data.Mysql (NuGet) MYSQLHELPER.csusing System;using System.Collections.Generic;using System.Text;using MySql.Data.MySqlClient;using MySql.Data;using System.Data;namespace dotNetMysql{public clas..._.net core 操作实例 mysqlhlper

图像处理17:3A算法-程序员宅基地

文章浏览阅读5.7k次,点赞10次,收藏81次。图像处理17:3A算法1.3A算法概述: 3A技术即自动对焦(AF)、自动曝光(AE)和自动白平衡(AWB),3A数字成像技术利用了AF、AE、AWB算法实现图像对比度最大、改善目标拍摄物过曝光或曝光不足情况,使画面在不同光线照射下的色差得到补偿,从而呈现较高画质的图像信息。 利用3A技术的摄像机能够很好的保障图像精准的色彩还原度,呈现完美的日夜间监控效果。..._3a算法

一些实用的小网站、小工具、软件_数据结构在线模拟器-程序员宅基地

文章浏览阅读1.4w次,点赞4次,收藏17次。免费在线画图工具:https://www.draw.io/在线听音乐:http://tool.liumingye.cn/music/?page=homePage_数据结构在线模拟器

使用telnet测试tomcat的虚拟主机时出现“ No Host matches server name www.xxx.com”的错误-程序员宅基地

文章浏览阅读4.9w次。出现这个错误的原因:1.在Host的appBase指定的那个目录下的ROOT目录下没有WEB-INF文件夹,没有这个文件夹的目录是不能作为根目录的。2.Host的appBase指定时直接指定到了ROOT目录,比如我刚开始写的是“D:\folder\ROOT”,去掉\ROOT即可。3.修改了server.xml中的Host后,没有重启tomcat._no host matches server name

随意的笔-程序员宅基地

文章浏览阅读569次。随意的笔 转书友[嫣逸然] 1 适当的享受可以使身心愉悦,  而放纵却能使人失掉老命。   2 在一个充满理性与暴力的世界里,  诗人是一种悲哀。   3 凡人和伟人只是一字之差   4 平凡是人们想像不到的美。5 在成功的瞬间不要忽略背后窥视的目光。6 名著,美在深处。7 当你独占一切时,你也将一无所有。8_随意的笔

使用MyBatis执行的sql不是自己写的sql语句_mybatisplus 发出的sql语句和自己在@select中写的sql不一样-程序员宅基地

文章浏览阅读1.2k次。MyBatis中通过继承SqlSessionDaoSupport来编写的DAO,由于直接复制之前的代码会有这种情况出现,原因是这一行没有改:将右侧红框内容改为与左侧红框内容一致即可;..._mybatisplus 发出的sql语句和自己在@select中写的sql不一样

随便推点

Source Insight 配色方案_sourceinsight配色方案-程序员宅基地

文章浏览阅读3.4w次,点赞16次,收藏85次。 Source Insight 对于程序员来说应该不陌生,当然一个个性化的编程界面也会让自己赏析悦目,下面就将个人的界面设置分享一下:一、背景色设置1、选择 Options → Preferences2、选择 Colors & Fonts → Windows Background → Pick Color3、设置背景色,可以先点击自定义颜色然后在设置 RGB,这样就能把本次设..._sourceinsight配色方案

RESTFeel: 一个企业级的API管理&测试平台。RESTFeel帮助你设计、开发、测试您的API...-程序员宅基地

文章浏览阅读82次。RESTFeelRESTFeel: 一个企业级的API管理&测试平台。RESTFeel帮助你设计、开发、测试您的API。功能简介:请求生成器-使HTTP请求轻松。请求树以树的形式组织请求。合作-添加团队成员,管理多个项目。PDF报告-生成项目状态报告PDF格式。历史-查看历史/活动..._企业级api开发平台

【Java】面试题63:股票的最大利润_股票买卖收益最大化java知道一只股票在每一天的价格,这是一个数组 如果最多只能买-程序员宅基地

文章浏览阅读1.1k次。题目:假设把某股票的价格按照时间先后顺序存储在数组中,请问卖该股票一次可能获得的最大利润是多少?例如,一只股票在某些时间节点的价格为{9,11,8,5,7,12,16,14},如果我们能在价格为5的时候买入并在16时卖出,则能收获最大的利润11.一、股票的最大利润(一次卖出)一个数组代表股票每天的价格,可以选择从某一天买入,然后之后的一天卖出,求能够获得的最大收益。例如,一只股票在某些时间..._股票买卖收益最大化java知道一只股票在每一天的价格,这是一个数组 如果最多只能买

IBM的免费机器怎么装宝塔_s390x如何安装宝塔-程序员宅基地

文章浏览阅读2k次。能装,但是要注意容器是否提供S390x架构。可以用,但是不能用官方的方法,安装方法如下。5.2GHz,960MB四级缓存。_s390x如何安装宝塔

python3连接mongodb数据库_python3 mongodb连接池-程序员宅基地

文章浏览阅读3.1k次。下面是用python3连接mongodb数据库的示例这些代码在官方文档上都用介绍__author__ = 'hello'from pymongo import MongoClientmc=MongoClient("localhost",27017)db=mc.productsc=db.one.find()for i in c: print(i)_python3 mongodb连接池

FindWindow,FindWindowEx,EnumWindows,EnumChildWindows的用法和区别_findwindowex findnextwindow-程序员宅基地

文章浏览阅读1.1k次。FindWindow,FindWindowEx,EnumWindows,EnumChildWindows的用法和区别FindWindow()HWND FindWindow(LPCSTR lpClassName, LPCSTR lpWindowName);功能:查找与指定窗口类名和窗口名称相匹配的顶级窗口,这个函数不搜索子窗口。参数:如果lpClassName为null,将会寻找任何与lpWindowName参数匹配的窗口,如果lpWindowName为NULL,则匹配所有窗口名。返回值:成功返_findwindowex findnextwindow

推荐文章

热门文章

相关标签