读书人

VC6 UDP编程聊天室BUG求大神解?解决

发布时间: 2012-10-18 13:46:55 作者: rapoo

VC6 UDP编程聊天室BUG,求大神解?
小的聊天程序(可以接收也可以发送),BUG是对某些IP(只是某些,如192.168.0.2,像192.168.0.5就不会出现此问题,等等)发送信息,然后再对本机IP发送信息(测试有在发送,但是本机接收不了),就接收不到了(别的IP发过来数据也接收不到了)。

具体实现函数是

C/C++ code
 CChatDlg::OnInitDialog() //初始化        {          InitSocket();//调用创建socket函数         RECVPARAM *recvParam = new RECVPARAM;   //RECVPARAM 是个结构体,包含socket和hWnd    recvParam->hWnd = this->m_hWnd;    recvParam->socket = m_socket;    HANDLE hThread = ::CreateThread(NULL,0,Thread,(LPVOID)recvParam,0,NULL);    ::CloseHandle(hThread);}DWORD WINAPI CChatDlg::Thread(LPVOID lpParameter){    SOCKET socket = ((RECVPARAM*)(lpParameter))->socket;    HWND hWnd = ((RECVPARAM*)(lpParameter))->hWnd;    SOCKADDR_IN sockFrom;    int len = sizeof(sockaddr);         int result;    char recvBuff[200]={0};    char tempBuff[200]={0};    while(true)    {        result = recvfrom(socket,recvBuff,200,0,(sockaddr*)&sockFrom,&len);  //接收数据        if(SOCKET_ERROR == result)            break;        sprintf(tempBuff,"%s say : %s",inet_ntoa(sockFrom.sin_addr),recvBuff);    //出现bug时观察tempBuff是空的          ::PostMessage(hWnd,WM_RECVDATA,0,(LPARAM)tempBuff);    }    return 0;}


[解决办法]
抓个包看看,数据到达本机了没有,如果有,就说明你的程序中有问题~
[解决办法]
封装了内容太多,
m_socket怎么来的?

你bind呢?

读书人网 >VC/MFC

热点推荐