TCP/UDP区别(不定期增加内容)
1:UDP可以发送字节为0的数据报,但是TCP不可以!UDP的recvfrom可以接受长度为0的数据包,这是一个只包含IP首部和一个8字节UDP首部的没有数据的IP数据报!
2:TCP read返回0时候表示对端已经关闭连接。
3:recvfrom和sendto也可以用于TCP,但是没有理由这样做!
4:UDP是无连接的,所以没有关闭一个UDP连接的说法。
5:TCP 不支持广播,UDP可以经过设置后广播。
6:有很多方法来获取和设置影响套接字的选项
getsockopt()和setsockopt()函数
fcntl() 函数
ioctl()函数
7:一般来说:大多数TCP服务器是并发的,大多数UDP服务器是迭代的。
8:TCP并发服务器在多个客户建立连接时每一个都有自己的套接字接收缓冲区。
9:UDP服务器,他用仅有的一个套接字接受所有的数据报并发回所有的响应。只有一个缓冲区。
10:udp协议提供的是面向非连接的服务,通信双方不需要建立连接。一方只需要建立好套接字,并显式或由系统绑定地址和端口号后就可以发送/接收数据包。和tcp不同的是,使用udp协议的数据报套接字(SOCK_DGRAM)并不限定唯一的通信方。既可以发送(sendto)数据给任意的接受方,也可以从任意的发送方接收(recvfrom)数据。
如果希望为一个数据报套接字指定唯一的通信方时,可以使用connect来实现这一功能。需要注意的是,在数据报套接字上使用connect并不是建立连接,不存在“握手”的过程。仅仅是为这个套接字指定一个通信方,一旦指定了对方的地址,就可以通过send/recv来发送/接收数据了。而且可以在这个数据报套接字上多次调用connect函数来指定不同的通信方。
在udp中使用connect的方法和tcp中类似,只需在创建套接字时,把套接字的类型由SOCK_STREAM换成SOCK_DGRAM即可。