2015-04-01 107 views
-2

我有一個簡單的C++庫,它實現了unix套接字,它在Linux系統上工作得很好,但是我正面臨將部分代碼移植到Windows平臺的問題,這顯然不支持unix插座。據我瞭解,替代方案將實現TCP套接字,whoose原則相當類似(從TCP端口寫入/讀取而不是特定文件)。將Unix套接字移植到Windows

上下文和邏輯上,代碼的轉換是否足夠簡單,可以在現有代碼的基礎上實現,或者我應該從頭開始重寫代碼?

+0

您不必讀/寫TCP端口。您將讀取/寫入可能是TCP或UDP的Windows套接字(至少那些是我知道的2)。您可能因爲您的問題過於模糊而無法專門回答,並且取決於您如何編寫原始實施方案以及您的目標是什麼,因此可能會被拒絕投票。 – Ian 2015-04-01 15:49:47

回答

1

Berkeley API確實存在於Windows上,並且與任何其他Berkeley套接字實現基本兼容。

有關將套接字代碼移植到Windows的信息,請參閱MSDN文章「將套接字應用程序移植到Winsock」。

+0

以及boost :: asio?它會在性能方面做得好嗎? – joaocandre 2015-04-01 20:12:00

+0

我會使用boost :: asio如果你正在開發跨平臺的應用程序,或者如果你已經使用增強的東西。 – 2015-04-02 05:37:30

1

套接字無法在Windows上工作的一個常見原因是您需要運行WSAStartup來啓動Winsock DLL。像這樣:

WORD wVersionRequested; 
WSADATA wsaData; 
int err; 

/* Use the MAKEWORD(lowbyte, highbyte) macro declared in Windef.h */ 
wVersionRequested = MAKEWORD(2, 2); 

err = WSAStartup(wVersionRequested, &wsaData); 
if (err != 0) { 
    /* Tell the user that we could not find a usable */ 
    /* Winsock DLL.         */ 
    printf("WSAStartup failed with error: %d\n", err); 
    return 1; 
} 

除此之外,Windows套接字API(WSA)與Berkeley套接字差不多。