我有一個簡單的C++庫,它實現了unix套接字,它在Linux系統上工作得很好,但是我正面臨將部分代碼移植到Windows平臺的問題,這顯然不支持unix插座。據我瞭解,替代方案將實現TCP套接字,whoose原則相當類似(從TCP端口寫入/讀取而不是特定文件)。將Unix套接字移植到Windows
上下文和邏輯上,代碼的轉換是否足夠簡單,可以在現有代碼的基礎上實現,或者我應該從頭開始重寫代碼?
我有一個簡單的C++庫,它實現了unix套接字,它在Linux系統上工作得很好,但是我正面臨將部分代碼移植到Windows平臺的問題,這顯然不支持unix插座。據我瞭解,替代方案將實現TCP套接字,whoose原則相當類似(從TCP端口寫入/讀取而不是特定文件)。將Unix套接字移植到Windows
上下文和邏輯上,代碼的轉換是否足夠簡單,可以在現有代碼的基礎上實現,或者我應該從頭開始重寫代碼?
Berkeley API確實存在於Windows上,並且與任何其他Berkeley套接字實現基本兼容。
有關將套接字代碼移植到Windows的信息,請參閱MSDN文章「將套接字應用程序移植到Winsock」。
以及boost :: asio?它會在性能方面做得好嗎? – joaocandre 2015-04-01 20:12:00
我會使用boost :: asio如果你正在開發跨平臺的應用程序,或者如果你已經使用增強的東西。 – 2015-04-02 05:37:30
套接字無法在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套接字差不多。
您不必讀/寫TCP端口。您將讀取/寫入可能是TCP或UDP的Windows套接字(至少那些是我知道的2)。您可能因爲您的問題過於模糊而無法專門回答,並且取決於您如何編寫原始實施方案以及您的目標是什麼,因此可能會被拒絕投票。 – Ian 2015-04-01 15:49:47