2012-12-19 27 views
0

我的Winsock编程的小问题,我试图集成一个图形界面,在两个客户端之间传递数据的能力。Winsock编程 - WsaGetSelectError,

基本上,C被按下并执行代码的第一部分,然后我会得到一个“套接字错误”,这是由我在这里的第二段代码中的MsgBox给出的。

case 'C': 
{ 
    if(!Connected) 
    { 
     connect(s,(LPSOCKADDR)&me,sa_size); 
     break; 
    } 
} 

case WM_SOCKET: 
    if (WSAGETSELECTERROR(lParam)) 
    { 
     cout << "Socket error\n"; 
     WSAGetLastError(); 
     MessageBox (hwnd,"Socket Error123","Information",MB_OK); 
     PostQuitMessage (0); 
     return 0; 
    } 

我真的不知道是什么,试图解决这个问题,我一直无法找到任何方面帮助下加入了图形界面到目前的网络代码,我有(其中不工作图形部分实施),只是寻找任何帮助,我现在可以找到。

+0

你到底是哪一个得到错误?你能改变你的代码来从WSAGetLastError输出错误代码,或通过FormatMessage输出实际的错误吗? – 2012-12-19 19:18:24

+0

那么,事实上,我没有得到任何错误。它使MsgBox出现,并且PostQuitMessage关闭程序。如果我删除了quit函数并保持原样,那么程序会继续,就好像没有任何事情发生一样。 – ShoKotic

+0

这并不意味着你没有收到任何错误;错误弹出窗口出现的事实意味着'WSAGETSELECTERROR(lParam)'正在评估为非零,这对我来说听起来像是一个错误。 – 2012-12-19 19:24:45

回答

0

'C'处理缺少break/return语句时Connected是真实的,你WM_SOCKET处理缺少break/return语句时WSAGETSELECTERROR()返回0

此外,WSAGetLastError()WM_SOCKET意义。您必须使用WSAGETSELECTERROR()报告的错误代码。

试试这个:

case 'C': 
{ 
    if (!Connected) 
     connect(s,(LPSOCKADDR)&me,sa_size); 
    break; 
} 

case WM_SOCKET: 
    if (WSAGETSELECTERROR(lParam)) 
    { 
     std::cout << "Socket error " << WSAGETSELECTERROR(lParam) << " on Event " << WSAGETSELECTEVENT(lParam) << std::endl; 
     MessageBox (hwnd, TEXT("Socket Error"), TEXT("Information"), MB_OK | MB_ICONERROR); 
     PostQuitMessage (0); 
     return 0; 
    } 
    break;