簡體   English   中英

WinSock2 無法連接到簡單服務器

[英]WinSock2 cant connect to simple server

我正在使用 C 在 windows 上學習網絡,我得到了這個奇怪的 10038 錯誤

WSADATA wsa;
SOCKET connect_socket;
printf("Initialising Winsock...");
if (WSAStartup(MAKEWORD(2, 2), &wsa) != 0)
{
    printf("Failed. Error Code : %d", WSAGetLastError());
    return 1;
}printf("Initialised.\n");

if (connect_socket = socket(AF_INET, SOCK_STREAM, 0) == INVALID_SOCKET) {
    printf("Could not create socket : %d\n", WSAGetLastError());
    return -1;
}
printf("Socket created.\n");
struct sockaddr_in server;
server.sin_family = AF_INET;
server.sin_port = htons(80);
server.sin_addr.s_addr = inet_addr("142.250.184.196");
if (connect(connect_socket, (struct sockaddr*)&server, sizeof(server)) != 0)
{
    printf("connect error : %d\n", WSAGetLastError());
    return 1;
}

printf("Connected\n");

return 0;

nslookup www.google.com -> "142.250.184.196" 嘗試運行程序時打印:" Initialising Winsock...Initialised.Socket created.connect error: 10038"

如果 (connect_socket = socket(AF_.NET, SOCK_STREAM, 0) == INVALID_SOCKET) {

基於C 中的運算符優先級,這意味着

connect_socket = (socket(AF_INET, SOCK_STREAM, 0) == INVALID_SOCKET)

因此connect_socket不是實際的套接字,而是檢查套接字是否有效的結果。 假設套接字創建有效,那么connect_socket將因此為假,即0

由於 0 不是有效的 TCP 套接字connect將失敗並出現錯誤 10038

WSAENOTSOCK
10038
非套接字上的套接字操作。 嘗試對不是套接字的對象進行操作。 套接字句柄參數未引用有效套接字,或者對於 select,fd_set 的成員無效。

要解決此問題,首先分配給connect_socket ,然后與INVALID_SOCKET進行比較。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM