将 Unix 套接字移植到 Windows [关闭]

Posted

技术标签:

【中文标题】将 Unix 套接字移植到 Windows [关闭]【英文标题】:Porting Unix Sockets to Windows [closed] 【发布时间】:2015-04-01 15:39:52 【问题描述】:

我有一个实现 unix 套接字的简单 C++ 库,它在 Linux 系统上运行良好,但是我面临将部分代码移植到 Windows 平台的问题,该平台显然不支持 unix 套接字。据我了解,另一种方法是实现 TCP 套接字,其原理非常相似(从 TCP 端口而不是特定文件写入/读取)。

从上下文和逻辑上来说,代码的转换是否足够简单,可以在现有代码之上实现,或者我应该从头开始重写代码?

【问题讨论】:

您不必读取/写入 TCP 端口。您将读取/写入可能是 TCP 或 UDP 的 Windows 套接字(至少那些是我所知道的 2 个)。您可能被否决了,因为您的问题太模糊而无法具体回答,并且取决于您如何编写原始实现以及您的目标是什么。 【参考方案1】:

Berkeley API 确实存在于 Windows 上,并且在很大程度上与任何其他 Berkeley Sockets 实现兼容。

有关将套接字代码移植到 Windows 的信息,请参阅 MSDN 文章“将套接字应用程序移植到 Winsock”。

【讨论】:

那么 boost::asio 呢?它会在性能方面发挥作用吗? 如果你正在开发跨平台应用程序或者你已经在使用 boost 的东西,我会使用 boost::asio。【参考方案2】:

套接字无法在 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) 与伯克利套接字非常相似。

【讨论】:

以上是关于将 Unix 套接字移植到 Windows [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

将socket程序从linux移植到windows上

将 UNIX 守护程序移植到 Windows 服务

使用 MsDev 将 linux 套接字应用程序移植到 Windows

socket是啥意思?

将 Linux 兼容项目从 Windows 移植到 Linux [关闭]

在windows系统中对套接字数据进行io时为啥不可以直接使用文件io相关函数?