本帖最后由 VisualEleven 于 2011-04-29 19:24:14 编辑

解决方案 »

  1.   

    客户端不需要bind(),可能书中表述有歧义
    一般bind不指定目标,只是服务端侦听,任何客户端都可以连接上来
      

  2.   

    客户端不需要调用bind,当然,你加上也没错!
    如果不调用bind函数,在调用connect或sendto的时候,系统分自动帮你绑定一个随机端口号
      

  3.   

    udp的话 如果客户端需要侦听服务端信息要bind
      

  4.   

    无论是TCP还是UDP的客户端都可以先调用bind函数,目的是为了绑定一个既定的端口,否则的话,底层会给该socket分配一个临时端口。如果有固定的端口,那么可以在路由器或防火墙那边配置端口映射规则,这在有些P2P下载软件里面经常使用,可以增加外网主动连接进来的数量,从而提高下载的速度。特别的像emule这样的软件,如果映射了端口,那么可以作为HIGHID在队列中享有优先权。
      

  5.   

    用UDP协议进行通信时,客户端是否需要调用bind()函数?为什么?
    ----------------------------------------------------
    客户端可以bind也不可以不调用bind。客户端创建套接字以后,如果首先调用的是sendto函数,则可以不调用bind函数显式绑定本地地址,系统会自动为程序绑定,以后的调用winsock API函数也不会失败。因为套接字已经绑定了。但是如果创建套接字以后,没有bind,而是直接调用recvfrom函数就会失败,因为套接字还没有绑定。