有两台机器,在同一个局域网内
一台(A)发送数据给另一台(B)
如果B收到数据,向A发送反馈数据用什么技术或者方法能够实现这样的功能:过了5s之后,如果A没有收到反馈,就自动提示网络不通?
谢谢!

解决方案 »

  1.   

    我需要提示超时
    我现在不知道用什么技术检测超时
    用setTimer吗?
      

  2.   


    我引用了wwwllg的代码,为的是解决UDP传输中超时的问题,也即如果A计算机发给B(A和B在同一个局域网内,如果5s内B没有反馈,那么就认为网络不通)我把代码改了一下,写在下面。我在测试的时候,即使B关机,函数返回值仍旧是true(也即连通),不知为何,麻烦各位指教一下,谢谢bool CNetCommCtrl::NetCheck(SOCKET m_Socket)//m_Socket是A上的socket
    {
    unsigned long  ul = 1;  
    int ret = ioctlsocket(m_Socket, FIONBIO, (unsigned long*)&ul); 
    SOCKADDR_IN trcSocket;

    if(ret==SOCKET_ERROR)
    {
    int erro = WSAGetLastError();
    TRACE("ioctlsocket erro\n");
    ASSERT(FALSE);
    return false;
    }
    trcSocket.sin_addr.s_addr= inet_addr("192.168.0.25");//B机器的IP
    trcSocket.sin_family = PF_INET;
    trcSocket.sin_port = htons(UDP_PORT_NUM);
    connect(m_Socket,(struct sockaddr*)&trcSocket,sizeof(trcSocket)); struct  timeval  timeout  ;  
    fd_set  r;   FD_ZERO(&r);  
    FD_SET(m_Socket, &r);  
    timeout.tv_sec = 5;  //连接超时5秒  
    timeout.tv_usec  =0;  
    ret = select(0, 0, &r, 0, &timeout);  
    if(ret <= 0)  
    {  
    int ret = WSAGetLastError();
    TRACE("连接失败: %d\n",ret);
    return false;
    }  
    return true;}
      

  3.   

    或者 
    如果我用SetTimer解决这个问题,定时器设为5s,到第5s转到消息处理函数,之后关闭定时器我应该在什么地方启动这个定时器呢?
    UDP传输程序一启动,我开启3个线程,一个用于接收报文,一个用于发送报文,一个用于处理接收到的报文谢谢!