我一直在嘗試用C++編寫一個簡單的聊天程序,並且遇到了套接字問題。以下代碼返回沒有明顯原因的WSA 10049錯誤
最後錯誤代碼爲(1):0
最後錯誤代碼爲(2):0
最後錯誤代碼爲(3):10049
最後錯誤代碼爲(4): 10022
在檢查MSDN頁面上的WSA錯誤之後,我發現10022是針對無效參數,而10049是試圖綁定到不可用的地址。我得出結論,10049錯誤導致10022錯誤,因爲我試圖在未綁定的套接字上偵聽。
之後,嘗試了幾個不同的地址來找到任何可用的地址,包括127.x.x.x,192.168.x.x,0.0.0.0,其中沒有一個可用。我跳進CMD,看到其他進程正在使用這些地址。有誰能指出我找到這個問題的根源的正確方向?
#include "stdafx.h"
using namespace std;
int main()
{
long SUCCESSFUL;
WSAData WinSockData;
WORD DLLVERSION;
DLLVERSION = MAKEWORD(2, 1);
SUCCESSFUL = WSAStartup(DLLVERSION, &WinSockData);
SOCKADDR_IN ADDRESS;
int AddressSize = sizeof(ADDRESS);
SOCKET sock_CONNECTION;
const CHAR addr[15] = "127.0.0.1";
char buffer [sizeof(in_addr)];
printf("Last error code was(1): %d\n", WSAGetLastError());
sock_CONNECTION = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
ADDRESS.sin_addr.s_addr = inet_pton(AF_INET, (const CHAR*)&addr, &buffer);
ADDRESS.sin_family = AF_INET;
ADDRESS.sin_port = htons(444);
printf("Last error code was(2): %d\n", WSAGetLastError());
bind(sock_CONNECTION, (SOCKADDR *)&ADDRESS, AddressSize);
printf("Last error code was(3): %d\n", WSAGetLastError());
listen(sock_CONNECTION, 5);
printf("Last error code was(4): %d\n", WSAGetLastError());
//note to self: don't use %x when referring to WSAGetLastError, returns untrue value outside WSAerror regular field
pause();
return 0;
}
你試過1024以上的端口嗎? – Dmitri
C不是C++不是C!不要添加不相關的標籤。 – Olaf