将 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 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章
使用 MsDev 将 linux 套接字应用程序移植到 Windows