GCDAsyncSocket

详见github中GCDAsyncSocket对socket的介绍


原文地址

最近在写udp程序的时候,对udp是否有必要bind存在了一定的疑惑,针对这个问题在网上查找了一些相关文章,并自己也写了部分代码进行验证。下面写出了自己的一点认识和感受。

众所周知,udp不是stream的,实际上没有什么标定的服务端和客户端之类的(习惯上认为接收数据的一端为服务端,发送数据的一端为客户端),那么bind还有意义吗?我个人认为主要看你是怎么用的,bind主要是指定创建的socket的有效范围,即这个socket涉及的有效ip地址和端口号,我们在创建socket后,往往要先设定插口的参数,比如缓存区大小,还有就是有效的ip地址,端口号等,使用bind就是使得这些设置生效。比如:

对于发送数据端,如果不用bind,则无固定端口发送,系统会自动选取一个端口(范围在1024--5000之间)发送数据。如果使用bind,就是用指定的端口发送数据。实际上,发送端一般只需要在sendto函数中指定对端ip地址和端口即可,至于本地是使用哪个端口发送应该无所谓,所以发送数据一般不需要bind。

对于接收数据端,一般在实际应用中都会指定接收XX端口的数据,所以接收数据一般使用bind

你可能感兴趣的:(GCDAsyncSocket)