Python3之基于UDP协议的网络编程
2017-08-23 15:18
549 查看
代码演示
服务端
from socket import * socket_server = socket(AF_INET, SOCK_DGRAM) socket_server.bind(('127.0.0.1', 8080)) while 1: data, client_addr = socket_server.recvfrom(1024) socket_server.sendto(data.upper(), client_addr) socket_server.close()
客户端
from socket import * udp_client = socket(AF_INET, SOCK_DGRAM) while 1: msg = input('>>:') udp_client.sendto(msg.encode('utf-8'), ('127.0.0.1', 8080)) data, server = udp_client.recvfrom(1024) print(data.decode('utf-8'))
要注意的问题
客户端可以发空消息
这是因为UDP协议是面向消息无连接的协议,可以高效的传输,但是缺点是容易丢包,而在发送消息过程中,UDP协议会将所有的消息加上报头进行传输,包括空消息。这就决定了服务端客户端可以发送空消息。粘包问题不会发生
基于上个问题的认识,消息会被自动加上报头进行传输,所以不会出现粘包现象,如果数据接收方对数据接收不全,win系统会报错,而linux系统会接收能接收的数据,剩余的数据会被清空丢弃。客户端可以直接启动发送消息
客户端可以发送消息,但是服务端未启动,说明消息传输不依赖另一端,消息被发送后没有被接收就会被丢弃。基于TCP传输是可靠传输,而基于UDP传输为非可靠传输
这个主要是由两者的工作机制决定的,而绝非有连接和无连接的区别。基于TCP主要是因为数据传输时发送的数据到达对方后对方会回复一个确认信息,如果没有回复,那么数据发送方会将数据重发,而基于UDP则只管发送数据包,对方收到收不到,数据发送方都不会关心。相关文章推荐
- python(12-2 网络编程 udp ,tcp 协议)
- 网络编程应用:基于UDP协议【实现文件下载】--练习
- Java网络编程_基于UDP协议的网络编程
- 使用Java网络编程创建基于UDP协议的Server和Client
- linux网络编程之socket(十四):基于UDP协议的网络程序
- 基于UDP协议的网络编程
- 基于UDP协议的C#网络编程
- 网络编程应用:基于UDP协议【实现聊天程序】--练习
- 【转载】 基于UDP、TCP协议的C#网络编程
- 基于UDP协议的网络编程
- 【转载】 基于UDP、TCP协议的C#网络编程
- linux网络编程之socket(十四):基于UDP协议的网络程序
- 网络编程(5)—— 基于Linux系统的UDP协议socket服务器和客户端
- 基于UDP协议的网络编程:
- linux网络编程之socket(十四):基于UDP协议的网络程序
- Python网络编程之TCP与UDP协议套接字用法示例
- 基于UDP、TCP协议的C#网络编程之一
- java 中基于udp协议的网络编程的 net库包的相关类的用法
- JAVA基础知识之网络编程——-基于UDP协议的通信例子
- 网络编程——基于TCP协议的Socket编程,基于UDP协议的Socket编程