需要实现这样的功能,向远程主机发送ping数据包,根据返回的包判断是否是通的。现在实现的思路是接受和发送分开处理,先把测试包全部发送出去,等了一段时间后开始接受分析。我的问题是,完成这个功能需要用到socket的什么函数,如果发送包直接用sendto的话,那么接受的时候尽管ip是通的,但是recvfrom函数为什么总是提示超时?

解决方案 »

  1.   

    接受的代码是这样的:
    WSADATA wsa;
    WSAStartup(MAKEWORD(2, 1), &wsa);OCKET sockRaw = WSASocket(AF_INET, SOCK_RAW, IPPROTO_ICMP, NULL, 0, 0);fd_set fds;
    FD_ZERO(&fds);
    FD_SET(socket, &fds);
    int nStatus = select(0, &fds, NULL, NULL, &timeout);调试发现问题在select函数,上面select函数返回的是0,所以就是超时的。那么请问:1。刚建立的socket为什么是不可读的?2。发送和接受数据是不是要bind端口才可以?
      

  2.   

    1、刚建立的socket当然是不能读的
    要进行连接操作(connect、listen)以后,才能用select判断是否有连接、读、写等请求2、不一定
      

  3.   

    ouyh12345(五岭散人),我这里不是面向连接的,不需要connect和listen吧,是不是要在bind之后才能接受?
      

  4.   

    bind,WSAAsyncSelect试试,我对网络也不熟,大家一起研究嘛.
      

  5.   

    发送create bind connect send 
    接受create bingd recvselect等IO处理是后话了
      

  6.   

    现在问题解决了一些,在ip少的情况下,发送出去的包能够正确返回,但是ip增大到几百个的时候,又出现了上述问题,就是有些现实是通的ip但是却没接受到包。
    我的问题是,在有大量的包到来的时候,recvfrom这个函数能不能正确接受到发送过来的每个包,会不会出现丢包的现象?
      

  7.   

    我这好像就是测试的ip多了的话,就有一些ip的包收不到,是不是可以分开接受?