Python 实战 udp网络程序-发送、接收数据(python怎么读)

网友投稿 398 2022-08-26


Python 实战 udp网络程序-发送、接收数据(python怎么读)

仅用学习参考

1. udp网络程序-发送数据

创建一个基于udp的网络程序流程很简单,具体步骤如下:

创建客户端套接字发送/接收数据关闭套接字

实验拓扑

在windows端,采用​​NetAssist​​网络调试工具接受数据,如下:

在Centos7系统,编写python代码发送UDP数据请求。

代码如下:

#coding=utf-8from socket import *# 1. 创建udp套接字udp_socket = socket(AF_INET, SOCK_DGRAM)# 2. 准备接收方的地址# '192.168.1.103'表示目的ip地址# 8080表示目的端口dest_addr = ('192.168.1.2', 8080) # 注意 是元组,ip是字符串,端口是数字# 3. 从键盘获取数据#send_data = input("请输入要发送的数据:")# 4. 发送数据到指定的电脑上的指定程序中udp_socket.sendto(b"hahahah", dest_addr)#udp_socket.sendto(send_data.encode('utf-8'), dest_addr)# 5. 关闭套接字udp_socket.close()

运行现象:

在Centos7中运行脚本:

优化一下,使用input方法来发送数据,代码如下:

[root@server01 work]# vim client.py #coding=utf-8from socket import *# 1. 创建udp套接字udp_socket = socket(AF_INET, SOCK_DGRAM)# 2. 准备接收方的地址# '192.168.1.103'表示目的ip地址# 8080表示目的端口dest_addr = ('192.168.1.2', 8080) # 注意 是元组,ip是字符串,端口是数字# 3. 从键盘获取数据send_data = input("请输入要发送的数据:")# 4. 发送数据到指定的电脑上的指定程序中#udp_socket.sendto(b"hahahah", dest_addr)udp_socket.sendto(send_data.encode('utf-8'), dest_addr)# 5. 关闭套接字udp_socket.close()

执行如下:

[root@server01 work]# python client.py 请输入要发送的数据:"hello server"[root@server01 work]#

2. udp网络程序-发送、接收数据

客户端发送数据的代码如下:

[root@server01 work]# vim client.py #coding=utf-8from socket import *# 1. 创建udp套接字udp_socket = socket(AF_INET, SOCK_DGRAM)# 2. 准备接收方的地址# '192.168.1.103'表示目的ip地址# 8080表示目的端口dest_addr = ('192.168.116.128', 7788) # 注意 是元组,ip是字符串,端口是数字# 3. 从键盘获取数据send_data = input("请输入要发送的数据:")# 4. 发送数据到指定的电脑上的指定程序中#udp_socket.sendto(b"hahahah", dest_addr)udp_socket.sendto(send_data.encode('utf-8'), dest_addr)# 5. 关闭套接字udp_socket.close()

服务端接收数据的代码如下:

[root@server01 work]# vim server.py #coding=utf-8from socket import *# 1. 创建套接字udp_socket = socket(AF_INET, SOCK_DGRAM)# 2. 绑定本地的相关信息,如果一个网络程序不绑定,则系统会随机分配local_addr = ('', 7788) # ip地址和端口号,ip一般不用写,表示本机的任何>一个ipudp_socket.bind(local_addr)# 3. 等待接收对方发送的数据recv_data = udp_socket.recvfrom(1024) # 1024表示本次接收的最大字节数# 4. 显示接收到的数据print(recv_data[0].decode('gbk'))# 5. 关闭套接字udp_socket.close()

测试执行如下:

从上面看,udp的之前数据已经成功传输。那么怎么循环传递数据呢?

多次发送,才能多次接收

3. udp网络程序-多次发送、接收数据

客户端设置循环发送数据,当输入stop的时候,停止发送。 代码如下:

[root@server01 work]# vim client.py #coding=utf-8from socket import *# 1. 创建udp套接字udp_socket = socket(AF_INET, SOCK_DGRAM)# 2. 准备接收方的地址# '192.168.116.128'表示目的ip地址# 7788表示目的端口dest_addr = ('192.168.116.128', 7788) # 注意 是元组,ip是字符串,端口是数字while True: # 3. 从键盘获取数据 send_data = input("请输入要发送的数据:") # 4. 发送数据到指定的电脑上的指定程序中 udp_socket.sendto(send_data.encode('utf-8'), dest_addr) # 发送stop,停止服务 if send_data == "stop": break# 5. 关闭套接字udp_socket.close()

服务端设置循环接收数据,代码如下:

[root@server01 work]# vim server.py #coding=utf-8from socket import *# 1. 创建套接字udp_socket = socket(AF_INET, SOCK_DGRAM)# 2. 绑定本地的相关信息,如果一个网络程序不绑定,则系统会随机分配local_addr = ('', 7788) # ip地址和端口号,ip一般不用写,表示本机的任何一个ipudp_socket.bind(local_addr)while True: # 3. 等待接收对方发送的数据 recv_data = udp_socket.recvfrom(1024) # 1024表示本次接收的最大字节数 # 4. 显示接收到的数据 recv_result = recv_data[0].decode('gbk') print(recv_result) # 显示对方的ip和端口 print(recv_data[1]) if recv_result == "stop": break# 5. 关闭套接字udp_socket.close()

执行如下:

从右边可以看到,客户端发送过来的端口每次都是变化的。那么能否固定一个端口号呢?

4. udp网络程序-固定客户端发送的端口号

客户端设置绑定发送数据的端口号,代码如下:

[root@server01 work]# vim client.py #coding=utf-8from socket import *# 1. 创建udp套接字udp_socket = socket(AF_INET, SOCK_DGRAM)# 绑定客户端发送数据的端口号local_addr = ('', 8008) # ip地址和端口号,ip一般不用写,表示本机的任何一个ipudp_socket.bind(local_addr)# 2. 准备接收方的地址# '192.168.1.103'表示目的ip地址# 8080表示目的端口dest_addr = ('192.168.116.128', 7788) # 注意 是元组,ip是字符串,端口是数字while True: # 3. 从键盘获取数据 send_data = input("请输入要发送的数据:") # 4. 发送数据到指定的电脑上的指定程序中 udp_socket.sendto(send_data.encode('utf-8'), dest_addr) # 发送stop,停止服务 if send_data == "stop": break# 5. 关闭套接字udp_socket.close()

执行如下:


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Python 操作文件(python培训)
下一篇:Python 实战TCP的客户端 - 胖子老板,再来一包烟(python下载安装教程)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~