返回列表 回复 发帖

[分享]UDP和socket函数

关键字 socket udp
原作者姓名 Fang
正文
以下讨论基于Winsock2文档。
UDP是一个无连接的协议,因此socket函数connect似乎对UDP是没有意义的,
然而事实不是这样。
一个插口有几个属性,其中包括协议,本地地址/端口,目的地址/端口。
对于UDP来说,socket函数建立一个插口;bind函数指明了本地地址/端口
(包括ADDR_ANY,通配所有本地网络接口);connect可以用来指明目的地
址/端口;
一般来说,UDP客户端在建立了插口后会直接用sendto函数发送数据,需要
在sendto函数的参数里指明目的地址/端口。如果一个UDP客户端在建立了插
口后首先用connect函数指明了目的地址/端口,然后也可以用send函数接受
数据,因为此时send函数已经知道对方地址/端口,用getsockname也可以得
到这个信息。
UDP客户端在建立了插口后会直接用sendto函数发送数据,还隐含了一个操作,
那就是在发送数据之前,UDP会首先为该插口选择一个独立的UDP端口(在1024
-5000之间),将该插口置为已绑定状态。如果一个UDP客户端在建立了插口后
首先用bind函数指明了本地地址/端口,也是可以的,这样可以强迫UDP使用指
定的端口发送数据。(事实上,UDP无所谓服务器和客户端,这里的界限已经模
糊了。)
UDP服务器也可以使用connect,如上面所述,connect可以用来指明目的地址
/端口;这将导致服务器只接受特定一个主机的请求。

                     我是一个呼吸着现在的空气而生活在过去的人
               这样的注定孤独,孤独的身处闹市却犹如置身于荒漠
                                     我已习惯了孤独,爱上孤独
                                 他让我看清了自我,还原了自我
                             让我再静静的沉思中得到快乐和满足
                                   再孤独的世界里我一遍又一遍
                                   不厌其烦的改写着自己的过去
                                             延伸到现在与未来
                                       然而那只是泡沫般的美梦
                                 产生的时刻又伴随着破灭的到来
                         在灰飞烟灭的瞬间我看到的是过程的美丽
                                      而不是结果的悲哀。。。
返回列表