簡體   English   中英

Winsock C TCP套接字

[英]Winsock C TCP Socket

我之前在Python中使用過TCP套接字。 它在C中看起來非常相似但我無法獲得任何工作。 socket(AF_INET, SOCK_STREAM, 0); 返回-1,這當然表示錯誤。 我怎么會這么快走錯路? 如果你可以幫我解決這個問題,那就太好了,但如果你能給我一些簡單的,簡單的骨頭源代碼,那將會非常有幫助。 它甚至不需要做任何事情,也不需要處理錯誤。 我只需要看看如何正確創建服務器套接字,綁定它,監聽它,接受客戶端以及如何創建和連接客戶端套接字。 我可以自己弄清楚所有的花里胡哨。

謝謝!

在進行任何其他winsock調用之前,您是否調用了WSAStartup

在使用套接字之前,需要使用WSAStartup函數初始化WinSock。 Python在Windows上實現套接字可能會自動調用它,所以你不必擔心它,但是當直接使用WinSock時,在任何其他WinSock調用之前調用WSAStartup很重要,當你的程序完成套接字時,你需要調用WSACleanup

WSAData data;

if (WSAStartup(MAKEWORD(2, 2), &data) != 0)
{
    // unable to initialise WinSock, time to quit
}

// WinSock has been successfully initialised, time to make sockets!
int s = socket(...);

// After all WinSock stuff is done, balance out your WSAStartup with a cleanup:
WSACleanup();

可能只是該進程無權創建套接字( errno == EACCES )。

也許你的python解釋器獲得了不同的安全上下文,檢查一下。

無論如何,比抱歉更安全,所以放在那里:

sock = socket(AF_INET, SOCK_STREAM, 0);
if (sock == -1) {
        perror("myapp");
        exit(1);
}

IDK,如果Winsock實際設置errno ,但它應該...

暫無
暫無

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

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