tcp 和 udp的区别:
1,tcp传输数据使用字节流的方式传输,udp是数据报
2,tcp会产生粘包现象,udp不会
3,tcp对网络条件要求高,udp更适合实时传输
4,tcp编程可以保证传输的可靠性,udp则不保证
5,tcp使用listen accpet, udp不需要
6,tcp使用recv send
udp使用recvfrom sendto
encode编码 decode 解码
udp特点
UDP套接口是无连接的、不可靠的数据报协议;既然他不可靠为什么还要用呢?其一:当应用程序使用广播或多播时只能使用UDP协议;其二:由于他是无连接的,所以速度快。因为UDP套接口是无连接的,如果一方的数据报丢失,那另一方将无限等待,解决办法是设置一个超时。
建立UDP套接口时socket函数的第二个参数应该是SOCK_DGRAM,说明是建立一个UDP套接口;由于UDP是无连接的,所以服务器端并不需要listen或accept函数。
udp 客户端
步骤
1、创建套接字
2、接受/发送数据
3、关闭套接字
#导入socket包
import socket
# 创建套接字
udp_socket_client = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
# 输入服务端地址
user_ip = input('请输入对方ip:')
user_port = int(input('请输入对方port:'))
# 绑定本机端口
udp_socket_client.bind(('',8081))
# 发送数据
send_data = 'hello world'
udp_socket_client.sendto(send_data.encode('utf-8'),(user_ip,user_port))
# 接收信息
data_info,ip_info = udp_socket_client.recvfrom(1024)
print(data_info.decode('utf-8')) # 解码
print(ip_info)
# 关闭套接字
udp_socket_client.close()
udp 服务端
import socket
udp_socket_server = socket.socket(socket.AF_INET, socket.SOCK_DGRAM
#创建一个socket,SOCK_DGRAM表示UDP
udp_socket_server.bind(('', 1280))
#绑定IP地址及端口
while True:
data_info = udp_socket_server.recvfrom(1024)
#获得数据和客户端的地址与端口,一次最大接收1024字节
print('接收到的数据为',data_info.decode('utf-8'))
udp_socket_server.sendto(data_info.encode('utf-8'))
#将数据变成大写送回客户端
udp_socket_server.close()