我一直在尝试用C++ Unix风格编写服务器,但我被困在Windows机器上.我从MinGW开始,但它没有正确编译并告诉我它找不到"sys/socket.h"文件.当然,这对于服务器甚至工作是必要的.我去寻找它,我觉得某个地方说安装Cygwin,因为它有很多库.好的,我安装了它.它可能为我提供的每一个图书馆.然后我再次编译,它仍然无法找到它.我去搜索整个包含文件夹,但找不到该文件.所以我有点恼火(3小时下来,我不需要额外的功能),但我继续搜索.我无论如何都找不到它.我找到了多个使用它的参考,但我无法找到任何下载它.我现在一直在寻找过去的几个小时,而且我对所有事情都感到非常沮丧,因为没有任何参考我可以得到它(我不会使用winsock.如果我没记错的话,会破坏兼容性).
所以,长话短说,我在哪里可以下载'socket.h'/'socket.c'/'socket.cpp'文件?这将使我的生活(我相信许多其他人的生活)变得更加容易,我真的很感激它!
Jer*_*ner 40
鉴于Windows没有sys/socket.h,你可能会考虑做这样的事情:
#ifdef __WIN32__
# include <winsock2.h>
#else
# include <sys/socket.h>
#endif
Run Code Online (Sandbox Code Playgroud)
我知道你表示你不会使用WinSock,但由于WinSock是在Windows下完成TCP网络的,所以我没有看到你有任何替代方案.即使您使用跨平台网络库,该库也将在内部调用WinSock.大多数标准的BSD套接字API调用都是在WinSock中实现的,所以有一点困难,你可以在Windows和其他操作系统下编译相同的基于套接字的程序.只是别忘了做一个
#ifdef __WIN32__
WORD versionWanted = MAKEWORD(1, 1);
WSADATA wsaData;
WSAStartup(versionWanted, &wsaData);
#endif
Run Code Online (Sandbox Code Playgroud)
在main()的顶部...否则所有套接字调用都将在Windows下失败,因为WSA子系统未针对您的进程进行初始化.
Mic*_*yan 12
既然您已经标记了C++这个问题,那么您可能对使用boost :: asio,ACE或其他一些C++或C的跨平台套接字库感兴趣.其他一些跨平台库可以在C++的答案中找到用于跨平台和跨平台网络API的套接字库.
假设使用第三方跨平台套接字库不适合您...
标头<sys/socket.h>在IEEE标准中定义.1003.1(POSIX),但遗憾的是Windows不符合POSIX标准.MinGW编译器是用于编译Windows应用程序的GCC端口,因此不包括这些POSIX系统头.如果使用Cygwin安装GCC ,则它将包含这些系统头以模拟Windows上的POSIX环境.但是,请注意,如果您使用Cygwin作为套接字a.),您需要将cygwin DLL放在应用程序可以读取它的地方,并且b.)Cygwin标头和Windows标头不能很好地交互(所以如果你计划包括windows.h,那么你可能不想包括sys/socket.h).
我个人的建议是下载VirtualBox的副本,下载Ubuntu的副本,将Ubuntu安装到VirtualBox中,然后在Ubuntu上进行编码和测试.或者,我被告知微软销售"UNIX子系统",并且它预先安装在Windows的某些高端版本上,虽然我不知道这个系统是否合规(如果它符合要求,哪个版本它符合的UNIX标准).Winsockets也是一种选择,尽管它们的行为方式可能与它们的POSIX对应物略有不同,即使签名可能类似.
| 归档时间: |
|
| 查看次数: |
136189 次 |
| 最近记录: |