2015-04-01 58 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套接字差不多。