面试遇到这样一个问题,请教大家了!!!面向无连接的数据报协议程序,能不能调用connect函数,如果可以,既然是无连接的,为什么可以调用它?调用它有什么用?

解决方案 »

  1.   

    可以调用connect。这种调用并没有建立连接,它只是进行了socket地址的关联,即给你增加了一个默认的接收方socket地址。
    也就是说,如果没有connect,你每次发送数据需要调用sendto,同时指明接收方的socket地址。
    调用connect之后,则直接用send(当然,要是在UNIX下还可以多一个选择,即用write)就可以了,不再需要提供接收方socket地址。
    另外需要说明的是,在connect之后如果调用sendto,并且提供了接收方地址,则数据会发给sendto中提供的socket地址去。
    也就是说,connect仅仅是让你可以使用send发送数据,而不用每次重复提供接收方的地址。除此之外,它并不改变UDP的其它特性。
      

  2.   

    mingbao讲得比较详细了,主要是本地协议栈软件的内部处理,详见:TCP/IP详解第一卷