2010-01-08 69 views
1

我測試了在C套接字服務器應用程序,我得到一個錯誤的綁定功能,代碼10038我看着這件事和MSDN說,這意味着:綁定錯誤10038在C窗口套接字應用程序

嘗試對不是套接字的東西進行操作。套接字句柄參數沒有引用有效的套接字,或者對於select,fd_set的成員無效。

下面是代碼:

//我有正確的包含文件,例如包括但計算器顯示很奇怪,當我把#包括winsock2.h

int main() 
{ 
WSADATA   wsaData; 
SOCKET   ListeningSocket; 
SOCKET   NewConnection; 
SOCKADDR_IN  ServerAddr; 
int    Port = 5150; 


if(WSAStartup(MAKEWORD(2,2),&wsaData) != 0) 
{ 
    printf("Server: WSAStartup failed with error %ld\n",WSAGetLastError()); 
    return -1; 
} 
else 
{ 
     printf("Server: The Winsock dll found!\n"); 
     printf("Server: The current status is: %s.\n",wsaData.szSystemStatus); 
} 

if(LOBYTE(wsaData.wVersion) != 2 || HIBYTE(wsaData.wVersion) != 2) 
{ 
    printf("Server: The dll do not support Winsock version 
      %u.%u!\n",LOBYTE(wsaData.wVersion),HIBYTE(wsaData.wVersion)); 
    WSACleanup(); 
    return -1; 
} 
else 
{ 
    printf("Server: The dll supports the Winsock version %u.%u!\n",LOBYTE(wsaData.wVersion),HIBYTE(wsaData.wVersion)); 
    printf("Server: The highest version this dll can support: %u.%u\n",LOBYTE(wsaData.wHighVersion),HIBYTE(wsaData.wHighVersion)); 
} 

ListeningSocket == socket(AF_INET,SOCK_STREAM,IPPROTO_TCP); 

if(ListeningSocket == INVALID_SOCKET) 
{ 
    printf("Server: Error at socket(), error code: %ld\n",WSAGetLastError()); 
    WSACleanup(); 
    return -1; 
} 
else 
    printf("Server: socket() is OK!\n"); 

ServerAddr.sin_family = AF_INET; 
ServerAddr.sin_port = htons(Port); 
ServerAddr.sin_addr.s_addr = htonl(INADDR_ANY); 

if(bind(ListeningSocket, (SOCKADDR *)&ServerAddr,sizeof(ServerAddr)) == SOCKET_ERROR) 
{ 

    printf("Server: bind() failed! Error code: %ld.\n",WSAGetLastError()); 
    closesocket(ListeningSocket); 
    WSACleanup(); 
    return -1; 
} 
else 
    printf("Server: bind() is OK!\n"); 

if(listen(ListeningSocket,5) == SOCKET_ERROR) 
{ 
     printf("Server: listen(): Error listening on socket %ld.\n", WSAGetLastError()); 
     closesocket(ListeningSocket); 
     WSACleanup(); 
     return -1; 
} 
else 
     printf("Server: listen() is OK, I'm waiting for connections...\n"); 

printf("Server: accept() is ready...\n"); 


while(1) 
{ 
     NewConnection = SOCKET_ERROR; 

     while(NewConnection == SOCKET_ERROR) 
     { 
      NewConnection = accept(ListeningSocket, NULL, NULL); 
     } 

     printf("Server: accept() is OK...\n"); 
     printf("Server: Client connected, ready for receiving and sending data...\n"); 

     ListeningSocket = NewConnection; 

     break; 
} 

if(closesocket(NewConnection) != 0) 
    printf("Server: Cannot close \"NewConnection\" socket. Error code: %ld\n", 
      WSAGetLastError()); 
else 
     printf("Server: Closing \"NewConnection\" socket...\n"); 

if(WSACleanup() != 0) 
     printf("Server: WSACleanup() failed! Error code: %ld\n", WSAGetLastError()); 
else 
     printf("Server: WSACleanup() is OK...\n"); 


return 0; 

}

回答

0

我剛剛得到它,我把==作爲

​​

instea =

ListeningSocket = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP); 
+0

我覺得自己像個白癡。 – Xaisoft 2010-01-08 16:49:46

+0

因爲你在你的答案中再次犯了錯誤... – bmargulies 2010-01-08 17:21:22

+0

是的,謝謝指出那個出來的朋友。 – Xaisoft 2010-01-11 14:51:18