最近在写聊天程序, 写了个服务端, 好不容易把程序调通了, 可运行结果却让我非常纠结... 有些想不明白, 还希望哪位大侠出来指教指教小弟... 先谢谢了, 下面是源码:
LRESULT CALLBACK ChatRoomServer(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
switch(message)
{
case WM_INITDIALOG:
hListenSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP) ;
if (hListenSocket == INVALID_SOCKET)
{
MessageBox(hDlg, TEXT("Can't Create Socket"), NULL, MB_OK);
WSACleanup();
return FALSE;
}
return TRUE;
case WM_COMMAND:
switch (LOWORD(wParam))
{
case IDC_START:
EnableWindow(GetDlgItem(hDlg, IDC_START), FALSE) ;
SAddr.sin_family = AF_INET ;
SAddr.sin_addr.s_addr = htonl(INADDR_ANY);
SAddr.sin_port = htons(TCP_PORT) ;
if (bind(hListenSocket, (SOCKADDR*)&SAddr, sizeof(SAddr)))
{
MessageBox(hDlg, TEXT("绑定端口失败!!!"), NULL, MB_OK) ;
break ;
}
else
MessageBox(hDlg, TEXT("绑定端口成功"), NULL, MB_OK) ;
listen(hListenSocket, 5) ;
while (TRUE)
{
MessageBox(hDlg, TEXT("accept函数调用开始..."), NULL, MB_OK) ;
ServerSocket = accept(hListenSocket, NULL, 0) ;
MessageBox(hDlg, TEXT("accept函数调用结束..."), NULL, MB_OK) ;
if (ServerSocket == INVALID_SOCKET)
{
MessageBox(hDlg, TEXT("accept函数调用失败..."), NULL, MB_OK) ;
break ;
}
else
{
MessageBox(hDlg, TEXT("创建一个线程"), NULL, MB_OK) ;
HANDLE hThread = CreateThread(NULL, 0 ,ServiceThread, ( PVOID) &ServerSocket, NULL, &ThreadID) ;
Count = Count + 1 ;
SetDlgItemText(hDlg, IDC_STATIC, _T("成功创建线程")) ;
CloseHandle(hThread) ;
}
}//while循环结束
closesocket(hListenSocket) ;
return TRUE;
case IDC_EXIT:
F_STOP = 1 ;
WSACleanup();
EndDialog(hDlg, LOWORD(wParam)) ;
return TRUE;
}
break;
}
return FALSE;
}
然后程序将MessageBox(hDlg, TEXT("accept函数调用开始..."), NULL, MB_OK) ;执行后进入accept函数建立链接, 虽然accept()函数只有连接成功的时候才会返回, 但是应该也不至于使应用程序没有响应吧... 所以就想不明白了
ServerSocket = accept(hListenSocket, NULL, 0) ;
程序未执行到这一句MessageBox(hDlg, TEXT("accept函数调用结束..."), NULL, MB_OK) ;
[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法