写了udp基本模型的程序,SERVER,CLIENT在同一端口工作,SERVER只接受,
CLIENT只发送。
  在同一机器上,启动SERVER后,启动2个CLIENT,发送n(bytes)
server可以接受2个CLIENT的数据.
  在CLIENT中查询sendto返回值均为n.
 (test 1) 现在让Server终止,结果client sendto 居然
不是SOCKET_ERROR,还是n(bytes)即发送的字节。
 (test 2) 不启动SERVER,只启动CLIENT,结果sendto返回还是那么多 : n(bytes)
不是SOCKET_ERROR  问题1:为什么sendto不返回SOCKET_ERROR 或者 负数
  问题1:怎么知道SERVER是否在接受状态,或者是否接受到

解决方案 »

  1.   

    1.tcp会返回senderr 因为有ack确认.udp没有
    2.heartbeat
      

  2.   

    sendto是不会理会执行效果的,只要把数据发送出去的好了,不管是否可以到达,所以永远返回发送的字节数,而不是SOCKET_ERROR。
    这种情况下SERVER是否接受是不可知的,如果一定要知道,那必须要求SERVER反馈。
      

  3.   

    正如它的名字说的,UDP是无连接的,它才不管你server端如何呢,它只管发,不提供传输质量支持。
      

  4.   

    所以你有看到udp connect()吗?
    它没有目标主机,是广播的形式。
      

  5.   

    udp只管发送!只要发送成功,就不会返回错误,至于发到哪去了,对方是否收到
    sendto的返回值是看不出来的
    如果返回了SOCKET_ERROR说明包根本就没有发送出去。