+ -
当前位置:首页 → 问答吧 → Socket客户端怎么知道服务器端有数据传来?

Socket客户端怎么知道服务器端有数据传来?

时间:2011-12-25

来源:互联网

客户端与服务器端不是同步的,客户端发出一个请求后,服务器端会不定时(比如有时候传回3个包,间隔1秒,有时传回2个包,间隔2秒)如果我在循环中用recv,会阻塞在里面,有没有什么方法判断服务器端有数据传来,知道有数据传来后再去接收?

作者: happy9182   发布时间: 2011-12-25

http://baike.baidu.com/view/536039.htm

作者: shn521   发布时间: 2011-12-25

使用异步套接字,非阻塞模式。

作者: chinatcp   发布时间: 2011-12-25

C/C++ code
BOOL CMyDlg::InitSocket()
{
    m_socket=WSASocket(AF_INET,SOCK_DGRAM,0,NULL,0,0);
    if(INVALID_SOCKET==m_socket)
    {
        MessageBox("创建套接字失败!");
        return FALSE;
    }

    SOCKADDR_IN addrSock;
    addrSock.sin_addr.S_un.S_addr=htonl(ADDR_ANY);
    addrSock.sin_family=AF_INET;
    addrSock.sin_port=htons(6000);

    if( SOCKET_ERROR==bind(m_socket,(SOCKADDR *)&addrSock,sizeof(SOCKADDR)) )
    {
        MessageBox("绑定失败 !");
        return FALSE;
    }
    if( SOCKET_ERROR== WSAAsyncSelect(m_socket,m_hWnd,UM_SOCK,FD_READ) )
    {
        MessageBox("注册网络消息失败!");
        return FALSE;
    }

    return TRUE;

}


UM_SOCK 是注册的消息,
一有消息来就会有这个消息通知你,
你自己去处理这个消息就行

作者: agoago_2009   发布时间: 2011-12-25