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

智能推荐

linux cron服务,linux系统中cron服务详解_weixin_39957951的博客-程序员宅基地

要使用 linux cron 服务,你必须安装了 vixie-cron RPM 软件包,而且必须在运行 crond 服务。要判定该软件包是否已安装,使用 rpm -q vixie-cron 命令。要判定该服务是否在运行,使用 /sbin/service crond status 命令。crond 是linux用来定期执行程序的命令。当安装完成操作系统之后,默认便会启动此任务调度命令。crond命令...

mysql为什么不建议delete数据_梦想冬的博客-程序员宅基地_为什么mysql不建议delete

简看书拿起手机发现boss推了个问题,mysql为什么不建议用delete删除数据?我心想:这是疯了吧,删除数据不用的delete用什么,还有别的删除语句吗?难道是我孤陋寡闻吗?抱着疑惑的角度百度了一番解答:发现看了几篇文章,还真是无知了,大概意思说的是一般用假删除(虽然我之前项目中大多用的也都是假删除),但是没有get到那个点,比如为什么要用假删除,可能很多是便于数据的恢复,让用户知道全部数据(包括以删除),以及更多的是数据是留着有用?我印象中这几个答案充斥着我的大脑,后来发现事实并不是这

oracle 函数插入操作,【学习笔记】Oracle存储过程 实现数据表的更新、插入、删除、再插入连接操作..._情商和口才的博客-程序员宅基地

实现的是从回收站还原的功能整体思路是,先更新所需的档案件号,然后复制到对应的部门表中,然后删除回收站表的数据,再把刚刚到部门表中的据插入到总表中,使得部门的表和总表数据一致ALTER PROC [dbo].[add_data_yes]@tablename varchar(30),@id INT,@jh INTASdeclare @sql nvarchar(4000)SET @sql=N'updat...

miui替换官方文件解决无服务器,miui 关掉云服务器_圣君阡陌的博客-程序员宅基地

miui 关掉云服务器 内容精选换一换本节操作介绍Linux云服务器切换密钥登录为密码登录的操作步骤。使用密钥登录Linux云服务器,设置root密码。sudo passwd root若密钥文件丢失或损坏,请参考Linux云服务器如何进入单用户模式重置root密码,重置root密码。sudo passwd root若密钥文件丢失或损坏,请参考Linux云服务器如何进入单用户模如果Linux操作系统...

如何区分Babel中的stage-0,stage-1,stage-2以及stage-3(转)_z-pan的博客-程序员宅基地

http://www.cnblogs.com/flyingzl/p/5501247.html(一)http://www.cnblogs.com/flyingzl/p/5504203.html(二)https://babeljs.io/docs/plugins/preset-stage-0/https://babeljs.io/docs/plugins/preset-stage-1...

angular4获得焦点事件_深究AngularJS——如何获取input的焦点(自定义指令)_币圈沉浮的博客-程序员宅基地

关于如何获取input框、textarea等的焦点,网上有许多文章都只是会跟你说ng-focus这个内置指令。像这种解答,只能说明作者并为真正理解人家的需求。ng-focus是一个事件,跟原生JS(JavaScript)的onfocus是一样的,当我们点击input框时,就会触发该事件,而在该事件里我们可以调用一个函数。所以,当人家问你如何获取焦点时一般的意思是,如果我进行了某些操作后,不用鼠标点...

随便推点

MySQL8.0.16详细安装教程--包含卸载教程_心动不能行动!!!的博客-程序员宅基地

安装数次,问题不断,所以打算写下教程。一、卸载如果是重新安装则需要按步骤来,首次安装可跳过。1.控制面板--程序--卸载--MySQL如果有的话,卸载。2.安装目录--删除我的目录为C:\Program Files\mysql-8.0.16.3.注册表中卸载在运行--输入“regedit”--编辑--查找--输入“mysql”--删除4.命令行删除cmd...

tkinter 消息窗口组件Messagebox_微凉[email protected][email protected]的博客-程序员宅基地

消息窗口组件Messagebox用于弹出提示框向用户进行警告,或让用户下一步如何操作。消息框包括很多类型,常用的有info、warning、error、yesno、okcancel等包含不同的图标、按钮以及弹出提示音。# 演示各消息框的程序及运行效果import tkinter as tkfrom tkinter import messagebox as msdef b1_clicked(): ms.showinfo("Info","Showinfo test.")def b2_cli

北京理工大学计算机实验三报告,北京理工大学计算机实验三报告表_泥潭小猪的博客-程序员宅基地

《北京理工大学计算机实验三报告表》由会员分享,可在线阅读,更多相关《北京理工大学计算机实验三报告表(5页珍藏版)》请在人人文库网上搜索。1、实验三 实验报告表实验名称:字符编码与信息交换学号: 姓名: 班级: 实验时间:实验报告表3-1 西文字符显示过程编码记录表输入字符ASCII码(十进制数)内存信息(二进制)显示字形码(十六进制)A6505530FE608实验报告表3-2 汉字显示过程编码记录...

2021年BATJ30套大厂Android经典高频面试题,附答案_普通网友的博客-程序员宅基地

大家应该看过很多分享面试成功的经验,但根据幸存者偏差的理论,也许多看看别人面试失败在哪里,对自己才更有帮助。最近跟一个朋友聊天,他准备了几个月,刚刚参加完字节跳动面试,第二面结束后,嗯,挂了…所以啊,不管怎么样,不论是什么样的大小面试,要想不被面试官虐的不要不要的,只有刷爆面试题题做好全面的准备,当然除了这个还需要在平时把自己的基础打扎实,这样不论面试官怎么样一个知识点里往死里凿,你也能应付如流~Android面试中有哪些常见问题汇总&答题思路目录:1.网络2.Java 基础&am..

python字符串转日期函数_YeWendaddy的博客-程序员宅基地

from datetime import datetimedef str2date(s): s=str(s,encoding='utf-8') return datetime.strptime(s,'%d-%m-%Y').date().weekday() #这里转换为星期几 以float形式返回

AD18 新建工程_弱鸡阿杰的博客-程序员宅基地

AD18–弱鸡的学习之旅(二)AD工程AD工程的组成概念在建立一个新的工程之前,我们首先需要了解,这个工程主要有什么组成?按照个人的经验来看,一个合格的工程主要由PCB,原理图,PCB库,原理图库组成。其中一些较为复杂的工程通常会由多个组成。并不局限于一个。原理图:简而言之就是电路板上的各个元器件的连接的图表。(二维)PCB:简而言之就是电路板,包括其焊接的元器件。(三维)原理图和PCB的关系:在得到PCB这个成型的印刷板之前,首先要有一个基础(原理图),可以说是一个计划,它决定了PCB上

推荐文章

热门文章

相关标签