16,472
社区成员
发帖
与我相关
我的任务
分享
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;
}