python基础—socket套接字(3),tcp和udp协议
前面的socket实例化,没有输入参数,采用的默认参数
socket_obj = socket.socket(socket_obj = socket.socket() #默认family=AF_INET, type=SOCK_STREAM)
1.SOCK_STREAM数据流,tcp协议,使用时候,客户端需要connect,服务端需要accept,建立链接生成新的对象,在对象内进行recv,
send收发消息。底层采用了Nagle算法,把短时间内多次数据量小的数据,合并成一个数据,然后封包,容易产生粘包问题,一次没接收干净的数据,会
在下次接收继续传过来;客户端断开会抛异常;正常情况下,不能收空
2.SOCK_DGRAM数据包,udp协议,使用recvfrom和sendto收发消息。每个包都又头。即使输入空,udp协议也会帮你封装上头;
没接收干净的数据会丢失。客户端断开不会抛异常;可收空
# 服务端 import socket socket_obj = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) socket_obj.bind(('127.0.0.1', 8080)) data = socket_obj.recvfrom(1024) print(data[0].decode('utf8'))
# 服务端 import socket socket_obj = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) socket_obj.sendto('from udp'.encode('utf8'), ('127.0.0.1', 8080))


浙公网安备 33010602011771号