iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >【Python】使用python通过TCP或UDP,实现收发报文数据
  • 531
分享到

【Python】使用python通过TCP或UDP,实现收发报文数据

udptcp/ippython网络协议 2023-10-01 12:10:59 531人浏览 薄情痞子

Python 官方文档:入门教程 => 点击学习

摘要

文章目录 1. socket 模块2. 通过TCP收发报文3. 通过UDP收发报文 1. Socket 模块 socket 又称"套接字",应用程序通常通过"套接字"向网络发出请求或者应答

文章目录

1. Socket 模块

socket 又称"套接字",应用程序通常通过"套接字"向网络发出请求或者应答网络请求,使主机间或者一台计算机上的进程间可以通讯。

可以通过socket() 函数来创建套接字对象:

  • socket.socket(socket.AF_INET, socket.SOCK_STREAM):创建socket对象,走tcp通道
  • socket.socket(socket.AF_INET, socket.SOCK_DGRAM):创建socket对象,走UDP通道

socket对象的方法:

tcp相关的方法

方法描述
listen()开始TCP监听,设置操作系统可以挂起的最大连接数量
accept()被动接受TCP客户端连接,(阻塞式)等待连接的到来
connect()主动初始化TCP服务器连接
send()发送TCP数据,发送的数据为bytes类型
recv()接收TCP数据,返回的数据为bytes类型

udp相关的方法

方法描述
sendto()发送UDP数据,发送的数据为bytes类型,并指定发送的地址(ip, port)
recvfrom()接收UDP数据,返回值是(data,address),address就是(ip, port)

公共方法

方法描述
bind()绑定地址(ip,port)到套接字, 在AF_INET下,以元组(ip,port)的形式表示地址
close()关闭套接字
getpeername()返回连接套接字的远程地址,返回值通常是元组(ip,port)
getsockname()返回套接字自己的地址,返回值通常是元组(ip,port)
settimeout(timeout)设置套接字操作的超时期,超时期应该在刚创建套接字时设置,因为它们可能用于连接的操作,如connect()
gettimeout()返回当前超时期的值

2. 通过TCP收发报文

新建文件tcp_server.py,用于模拟server端。

import sockettcpServer = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 创建socket对象,走tcp通道host = socket.gethostname() # 获取本地主机名port = 1000 # 端口号addr = (host, port)tcpServer.bind(addr) # 绑定地址tcpServer.listen(5) # 设置最大连接数,超过后排队while True:    conn,addr = tcpServer.accept() # 建立客户端连接    print(conn)    data = conn.recv(1024) # 接收来自客户端的数据,小于1024字节    print(data)    msg = 'Hello Client'.encode('utf-8')    conn.send(msg) # 发送数据给客户端    conn.close() # 关闭连接    
  1. 本地主机名也可以换成IP地址,如host = '192.168.1.100'
  2. server 端需要一直运行,等待 client 端的连接,所以使用while True无限循环
  3. 发送的数据必须是bytes类型,所以字符串需要编码'Hello Client'.encode('utf-8'),编码后为bytes类型

新建文件tcp_client.py,用于模拟client端。

import socket                tcpClient = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 创建socket对象host = socket.gethostname() port = 1000 addr = (host, port)tcpClient.connect(addr) # 连接服务,指定主机和端口号data = b'\x01\x64\xff' # 报文数据,bytes类型tcpClient.send(data) # 发送数据给服务端msg = tcpClient.recv(1024) # 接收来自服务端的数据,小于1024字节print(msg.decode('utf-8'))tcpClient.close()

client 端的地址需与 server 端一致,否则会报错:

  • IP地址不一致,则会发送数据给其他服务器,可能会出现报错TimeoutError
  • 端口号不一致,会出现报错ConnectionRefusedError

打开两个cmd窗口,一个为server端窗口,另一个为client端窗口。

运行顺序,先启动server,后启动client:

  • server端窗口,先执行命令 python tcp_server.py
  • client端窗口,后执行命令 Python tcp_client.py

运行结果如下:

server端窗口:

在这里插入图片描述

client端窗口:

在这里插入图片描述

注:可以看到server端打印的报文为b'\x01d\xff',看上去与client端发送报文b'\x01\x64\xff'不一致,实际上是一致的。
\x01d中的d为ASCII码,d对应的16进制的ASCII码正好是64,也就是说\x01d其实就是\x01\x64的缩写而已。

运行如下代码,可以看到两者报文的长度和内容都是一致的:

clientData =  b'\x01\x64\xff'serverData = b'\x01d\xff'print(list(clientData)) # [1, 100, 255]print(list(serverData)) # [1, 100, 255]

3. 通过UDP收发报文

新建文件udp_server.py,用于模拟server端。

import socketudpServer = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) # 创建socket对象,走udp通道host = socket.gethostname() # 获取本地主机名port = 1000serverAddr = (host, port)udpServer.bind(serverAddr) # 绑定服务端地址while True:    clientData,clientAddr = udpServer.recvfrom(1024) # 接收来自客户端的数据    print(clientData,clientAddr)    msg = 'Hello Client'.encode('utf-8')    udpServer.sendto(msg, clientAddr) # 发送数据给客户端    

新建文件udp_client.py,用于模拟client端。

import socketudpClient = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) # 创建socket对象,走udp通道host = socket.gethostname() # 获取本地主机名port = 1000serverAddr = (host, port)data = b'\x01\x64\xff' # 报文数据,bytes类型udpClient.sendto(data, serverAddr) # 发送数据给服务端serverData,serverAddr = udpClient.recvfrom(1024) # 接收来自服务端的数据print(serverData.decode('utf-8'), serverAddr)udpClient.close()    

打开两个cmd窗口,一个为server端窗口,另一个为client端窗口。

运行顺序,先启动server,后启动client:

  • server端窗口,先执行命令 python udp_server.py
  • client端窗口,后执行命令 python udp_client.py

运行结果如下:

server端窗口:

在这里插入图片描述

client端窗口:

在这里插入图片描述

来源地址:https://blog.csdn.net/aidijava/article/details/127587892

--结束END--

本文标题: 【Python】使用python通过TCP或UDP,实现收发报文数据

本文链接: https://www.lsjlt.com/news/422239.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 【Python】使用python通过TCP或UDP,实现收发报文数据
    文章目录 1. socket 模块2. 通过TCP收发报文3. 通过UDP收发报文 1. socket 模块 socket 又称"套接字",应用程序通常通过"套接字"向网络发出请求或者应答...
    99+
    2023-10-01
    udp tcp/ip python 网络协议
  • python实现TCP文件接收发送
    本文实例为大家分享了python实现TCP文件接收发送的具体代码,供大家参考,具体内容如下 下一篇分享:udp收发的实现 先运行服务器端打开接收,在运行客服端发送文件 还有记得改一下...
    99+
    2024-04-02
  • 使用Winsock通过TCP发送数据段
    首先,需要包含 `winsock2.h` 头文件,并链接 `ws2_32.lib` 库文件。然后,可以按照以下步骤使用Winsock...
    99+
    2023-09-08
    C
  • 使用python实现UDP通信方式
    目录python UDP通信对UDP协议的理解Socket简介UDP特点UDP中客户端和服务器端交互 UDP网络通信过程 多线程聊天室服务器端的实现UDP中广播p...
    99+
    2024-04-02
  • 使用Java怎么实现发送报文与接收报文
    这篇文章将为大家详细讲解有关使用Java怎么实现发送报文与接收报文,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。发送报文先创建生成报文的方法,添加了xml数据public Stri...
    99+
    2023-06-14
  • 怎么通过Python实现批量数据提取
    这篇文章主要介绍“怎么通过Python实现批量数据提取”,在日常操作中,相信很多人在怎么通过Python实现批量数据提取问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么通过Python实现批量数据提取”的疑...
    99+
    2023-07-05
  • 通过Python实现对SQL Server 数据文件大小的监控告警功能
    1.需求背景 系统程序突然报错,报错信息如下: The transaction log for database '@dbname' is full. To find out wh...
    99+
    2024-04-02
  • 如何使用python连接数据库后通过占位符添加数据
    这篇文章主要介绍了如何使用python连接数据库后通过占位符添加数据,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。在SQL语句中如果定义字符串,则字符串必须使用“'”...
    99+
    2023-06-22
  • 如何使用Python通过获取剪切板数据实现百度划词搜索功能
    小编给大家分享一下如何使用Python通过获取剪切板数据实现百度划词搜索功能,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!一、实现划词功能说是划词翻译,实际上我们...
    99+
    2023-06-15
  • python详解如何通过sshtunnel pymssql实现远程连接数据库
    最近几天在做Python相关项目,有个需求 ,是希望在任何机器上都可以ssh到某台在数据库白名单的机器上,然后访问数据库,不然的话就要去服务器安装Python环境,运行程序,比较麻烦...
    99+
    2024-04-02
  • 通过使用Ajax函数实现异步数据交换的方法
    如何利用Ajax函数实现异步数据交互 随着互联网和Web技术的发展,前端与后端之间的数据交互变得十分重要。传统的数据交互方式,如页面刷新和表单提交,已经不能满足用户的需求。而Ajax(Asynchronous JavaScrip...
    99+
    2024-01-26
    异步 ajax 数据交互
  • 利用Python实现自动生成数据日报
    目录前言需求详解数据处理前言 人生苦短,快学Python! 日报,是大部分打工人绕不过的难题。 对于管理者来说,日报是事前管理的最好抓手,可以了解团队的氛围和状态。可对于员工来说,那...
    99+
    2024-04-02
  • 利用Python通过获取剪切板数据实现百度划词搜索功能
    目录一、实现划词功能二、运行错误三、解决问题一、实现划词功能 说是划词翻译,实际上我们是通过获取用户的剪切板内容,通过一系列的操作得到的。首先呢,我们就先实现如何获取剪切板内容的程序...
    99+
    2024-04-02
  • 如何使用Python实现实时数据处理?
    随着数据的不断增长,实时数据处理已经成为了数据科学家们必须要掌握的技能之一。Python作为一种强大的编程语言,在实时数据处理方面也有着独特的优势。本文将介绍如何使用Python实现实时数据处理,并附带演示代码。 实时数据处理 实时数据处理...
    99+
    2023-10-07
    同步 实时 numy
  • Python如何通过Scrapy框架实现爬取百度新冠疫情数据
    这篇文章主要介绍了Python如何通过Scrapy框架实现爬取百度新冠疫情数据,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。环境部署主要简单推荐一下插件推荐这里先推荐一个Go...
    99+
    2023-06-25
  • Python-使用matplotlib.pyplot实现实时数据动态显示
    目录 一、引言 二、从一块代码开始 1、%matplotlib qt5 2、plt.icon 三、另一种在行内(Jupyter Notebook内)展示动态图形的方法 1、display和display.clear_output() 一...
    99+
    2023-09-01
    python 信息可视化 开发语言
  • 如何使用Python脚本在Linux中实现邮件发送与接收
    如何使用Python脚本在Linux中实现邮件发送与接收在Linux系统中,我们可以使用Python脚本来实现邮件的发送与接收功能。Python的smtplib和imaplib模块提供了相应的功能。一、邮件发送要实现邮件发送功能,首先需要准...
    99+
    2023-10-22
    Python Linux 邮件
  • python使用requests实现发送带文件请求功能
    目录1. requests发送文件功能2. requests发送多个文件请求3. Django 接收文件1. requests发送文件功能 Requests 使得上传多部分编码文件变...
    99+
    2022-12-08
    python requests发送文件请求 python requests发送请求
  • 怎么使用python中的生成器实现周期性报文发送功能
    这篇文章主要介绍了怎么使用python中的生成器实现周期性报文发送功能的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇怎么使用python中的生成器实现周期性报文发送功能文章都会有所收获,下面我们一起来看看吧。使...
    99+
    2023-07-05
  • Python利用临时文件实现数据的保存
    假设有一个 WebSocket 接口,会源源不断地产生数据,我们需要将其保存下来,然后进行处理。但由于数据量比较大,无法一次性加载到内存,最好的办法就是保存到文件里。 如果数据处理完...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作