2010-11-28 108 views
1

我使用的是http://social.msdn.microsoft.com/Forums/en/vcgeneral/thread/126639f1-487d-4755-af1b-cfb8bb64bdf8上發佈的代碼,但它不像第一篇文章中所述的那樣發送數據。我如何使用WSAGetLastError(),就像它在解決方案中說的那樣,以查明哪裏出了問題?Winsock IRC客戶端連接但不發送數據

我試過如下:

void IRC::SendBuf(char* sendbuf) 

    { 

     int senderror = send(m_socket, sendbuf, sizeof(sendbuf), MSG_OOB);  

    if(senderror == ERROR_SUCCESS) { 
      printf("Client: The test string sent: \"%s\"\n", sendbuf); 
    } 
    else { 
      cout << "error is: " << senderror << ", WSAGetLastError: " << WSAGetLastError() << endl;  
    printf("Client: The test string sent: \"%s\"\n", sendbuf); 

    } 
    } 

,輸出是:錯誤是:4,WSAGetLastError:0

回答

0

你正在評估的WSAGetLastError地址而不是調用它。你需要爲了增加括號實際上調用該函數:

void IRC::SendBuf(char* sendbuf) 
{ 
    int senderror = send(m_socket, sendbuf, strlen(sendbuf), 0); 
    if (senderror != SOCKET_ERROR) { 
     printf("Client: The test string sent: \"%s\"\n", sendbuf); 
    } else { 
     cout << "Error is: " << WSAGetLastError() << endl; 
    } 
} 

編輯:send()函數返回寫入的字節數,而不是一個錯誤代碼。您需要根據SOCKET_ERROR測試返回值,如上面更新的代碼中所示。在你的情況下,send()告訴它成功發送了4個字節。

正如你在下面指出的那樣,它只發送4個字節,因爲這是sendbuf變量(它是一個指針,而不是緩衝區)的大小。如果sendbuf中的字符串以空字符結尾,則可以使用strlen()代替。如果不是,您可能應該將一個字符串長度參數添加到IRC::SendBuf()本身。

+0

現在它打印0.不應該得到這裏列出的代碼之一? http://msdn.microsoft.com/en-us/library/ms740668%28VS.85%29.aspx#winsock.wsaeshutdown_2 – thorvald 2010-11-28 07:34:32

相關問題