VC6 UDP编程聊天室BUG,求大神解?解决思路
VC6 UDP编程聊天室BUG,求大神解?
小的聊天程序(可以接收也可以发送),BUG是对某些IP(只是某些,如192.168.0.2,像192.168.0.5就不会出现此问题,等等)发送信息,然后再对本机IP发送信息(测试有在发送,但是本机接收不了),就接收不到了(别的IP发过来数据也接收不到了)。
具体实现函数是
------解决方案--------------------
抓个包看看,数据到达本机了没有,如果有,就说明你的程序中有问题~
------解决方案--------------------
封装了内容太多,
m_socket怎么来的?
你bind呢?
小的聊天程序(可以接收也可以发送),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呢?