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
2,tcp会产生粘包现象,udp不会
3,tcp对网络条件要求高,udp更适合实时传输
4,tcp编程可以保证传输的可靠性,udp则不保证
5,tcp使用listen accpet, udp不需要
6,tcp使用recv send
udp使用recvfrom sendto
udp通信的使用:
1,创建数据报套接字
sockfd = socket(AF_INET,SOCK_DGRAM)
2,绑定服务端地址
ADDR = ('192.168.1.2',8888)
socked.bind(ADDR)
3,收发消息
data,addr = recvfrom(buffersize)
功能:接收数据报套接字消息
参数:每次最多接收消息的大小 (字节)
返回值:data = 接收到的消息
addr = 消息发送者的地址
sockfd = socket(AF_INET,SOCK_DGRAM)
2,绑定服务端地址
ADDR = ('192.168.1.2',8888)
socked.bind(ADDR)
3,收发消息
data,addr = recvfrom(buffersize)
功能:接收数据报套接字消息
参数:每次最多接收消息的大小 (字节)
返回值:data = 接收到的消息
addr = 消息发送者的地址
*revefrom 一次接收一个数据包,如果数据一次没有接收完则会丢失没接收的内容
sendto(data,addr)
功能:发送消息
参数:data 要发送的消息
addr 发送给某个主机的地址
功能:发送消息
参数:data 要发送的消息
addr 发送给某个主机的地址
返回值:发送消息的字节数
关闭套接字
close()
close()
TCP粘包处理:
tcp中数据以数据流的方式发送接收,每次发送的数据间没有边界,在接收时
可能造成数据的粘连即为粘包
粘包如何处理:
1,每次发送消息结束位置加标志
2,发送的消息添加结构描述
3,当连续发送时 每次发送有一个短暂的延迟 sleep(0.1)
tcp中数据以数据流的方式发送接收,每次发送的数据间没有边界,在接收时
可能造成数据的粘连即为粘包
粘包如何处理:
1,每次发送消息结束位置加标志
2,发送的消息添加结构描述
3,当连续发送时 每次发送有一个短暂的延迟 sleep(0.1)
关于recv 和 send:
发送接收缓冲区
发送和接收消息均先放到缓冲区,再进行处理
recv接收消息当一次接收不完的时候下次会继续接收
当recv阻塞时,如果客户端断开,则recv立即返回空字符串
发送接收缓冲区
发送和接收消息均先放到缓冲区,再进行处理
recv接收消息当一次接收不完的时候下次会继续接收
当recv阻塞时,如果客户端断开,则recv立即返回空字符串