python udp 传输文件_python网络编程:UDP方式传输数据

UDP --- 用户数据报协议(User Datagram Protocol),是一个无连接的简单的面向数据报的运输层协议。

UDP不提供可靠性,它只是把应用程序传给IP层的数据报发送出去,但是并不能保证它们能到达目的地。

由于UDP在传输数据报前不用在客户和服务器之间建立一个连接,且没有超时重发等机制,故而传输速度很快。

开发环境:linux下pycharm3.5

测试:使用terminal终端测试

使用 nc -u ip 端口 进行测试客户端

使用 nc -lu ip 端口 进行测试服务器端

1.udp服务器端接受一次数据

import socket

# 设置服务器默认端口号

PORT = 9002

# 创建一个套接字socket对象,用于进行通讯

# socket.AF_INET 指明使用INET地址集,进行网间通讯

# socket.SOCK_DGRAM 指明使用数据协议,即使用传输层的udp协议

server_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

address = ("", PORT)

# 为服务器绑定一个固定的地址,ip和端口

server_socket.bind(address)

# 接收客户端传来的数据 recvfrom接收客户端的数据,默认是阻塞的,直到有客户端传来数据

# recvfrom 参数的意义,表示最大能接收多少数据,单位是字节

# recvfrom返回值说明

# receive_data表示接受到的传来的数据,是bytes类型, receive_data.decode()解码,将bytes类型转换为字符串类型

# client_address 表示传来数据的客户端的身份信息,客户端的ip和端口,元组

receive_data, client = server_socket.recvfrom(1024)

print("来自客户端%s,发送的%s" % (client, receive_data.decode()))

# 不再接收数据的时候,将套接字socket关闭

server_socket.close()

测试:

2.udp服务端循环多次接受数据

import socket

PORT = 9002

server_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

address = ("192.168.219.129", PORT)

server_socket.bind(address)

while True:

receive_data, client_address = server_socket.recvfrom(1024)

print("接收到了客户端 %s 传来的数据: %s" % (client_address, receive_data.decode()))

PS:遇到问题没人解答?需要Python学习资料?可以加点击下方链接自行获取

note.youdao.com/noteshare?id=2dce86d0c2588ae7c0a88bee34324d76

3.udp客户端接受一次数据

import socket

client_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

msg = input("请输入要发送的内容:") # 字符串类型, 通过msg.encode() 编码 转换为bytes类型

server_address = ("127.0.0.1", 8000) # 接收方 服务器的ip地址和端口号

client_socket.sendto(msg.encode(), server_address)

client_socket.close()

4.udp客户端循环多次接受数据

import socket

client_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

while True:

msg = input("请输入要发送的内容:")

server_address = ("192.168.79.127", 8000)

client_socket.sendto(msg.encode(), server_address)

5.udp服务器端循环多次接受发送数据

import socket

PORT = 8000

server_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

address = ("", PORT)

server_socket.bind(address)

while True:

receive_data, client_address = server_socket.recvfrom(1024)

print("接收到了客户端d %s 传来的数据: %s" % (client_address, receive_data.decode()))

server_socket.sendto(receive_data, client_address)

6.udp客户端循环多次接受发送数据

import socket

client_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

while True:

msg = input("请输入要发送的内容:")

server_address = ("", 8000)

client_socket.sendto(msg.encode(), server_address)

receive_data, sender_address = client_socket.recvfrom(1024)

print("接受到了发送方 %s 传来的数据: %s" % (sender_address, receive_data.decode()))

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值