2014-04-14 95 views
0

我試圖設置與客戶端在同一臺計算機上運行的服務器應用程序的簡單連接。winsock連接方法錯誤10038

我的代碼如下所示:

void Base::Connect(string ip, string port) 
{ 
    int status; 
    SOCKET ConnectSocket = INVALID_SOCKET; 
    struct addrinfo hints; 
    struct addrinfo *servinfo; // will point to the results 

    memset(&hints, 0, sizeof hints); // make sure the struct is empty 
    hints.ai_family = AF_UNSPEC;  // don't care IPv4 or IPv6 
    hints.ai_socktype = SOCK_STREAM; // TCP stream sockets 

    // get ready to connect 
    status = getaddrinfo(ip.c_str(), port.c_str(), &hints, &servinfo); 

    // Socket Setup 
    if (ConnectSocket = socket(servinfo->ai_family, servinfo->ai_socktype, servinfo->ai_protocol) == INVALID_SOCKET) 
    { 
     printf("[NETWORKING] An error occured when setting up socket\n"); 
    } 

    // Connect 
    if (connect(ConnectSocket, servinfo->ai_addr, (int)servinfo->ai_addrlen) == SOCKET_ERROR) 
    { 
     int error = WSAGetLastError(); 
     printf("Connect error: ", error); 
    } 
} 

在此之前,我稱之爲WSAStartup(),它不會引發任何錯誤。如果服務器處於打開或關閉狀態,則錯誤不會更改。

我使用的IP是127.0.0.1,我通過端口80連接。我嘗試了一些其他的(1337),這給了我同樣的錯誤。

有什麼明顯的錯誤嗎?任何想法可能會出錯?

+0

WSAENOTSOCK名單。你的套接字創建有一個括號錯誤 – deviantfan

+0

你在哪裏看到括號錯誤?實際socket()方法我找不到任何錯誤 – Dries

+0

下面寫的答案 – deviantfan

回答

2
if (ConnectSocket = socket(servinfo->ai_family, servinfo->ai_socktype, servinfo->ai_protocol) == INVALID_SOCKET) 

You're比較插座(...),以INVALID_SOCKET
然後you're分配結果真/假以ConnectSocket。
使用

if ((ConnectSocket = socket(servinfo->ai_family, servinfo->ai_socktype, servinfo->ai_protocol)) == INVALID_SOCKET) 

見C++運算符優先級

+0

解決了它(等待7分鐘將其標記爲正確答案),但現在它拋出10061(主動拒絕......)。我有服務器運行的方式。 – Dries

+0

WSAECONNREFUSED:通常是以下之一:a)指定端口上沒有服務器程序。 b)防火牆設置。 – deviantfan

+0

我關閉了防火牆,但仍然返回10061錯誤,並且端口相同(80)。我會再看看它,並在稍後創建一個新問題。感謝您的幫助 – Dries