在Windows上使用sys / socket.h函数

时间:2010-06-01 19:37:17

标签: c windows sockets

我正在尝试在Windows中使用socket.h函数。基本上,我目前正在https://beej.us/guide/bgnet/html/multi/clientserver.html#datagram查看示例代码。我知道socket.h是一个Unix函数 - 无论如何我在编译这个示例代码时可以轻松地模拟该环境吗?不同的IDE /编译器会改变什么吗?

否则,我想我需要利用虚拟化的Linux环境,这可能是最好的,因为代码最有可能在UNIX环境中运行。

感谢。

3 个答案:

答案 0 :(得分:35)

您有两种选择:

  1. 使用Cygwin(Unix仿真库)。
  2. 端口到Winsock(Windows标准库)。
  3. Cygwin:允许你编译你的Unix源代码大部分都不受影响,但是你可以将你绑定到Cygwin仿真库(这意味着在运行时有两件事:一般性能 - 不仅仅是网络 - 可能不是最优的;并且运行环境必须有Cygwin DLL可用)。

    Winsock:要求您用sys/socket.h替换winsock2.h(BSD套接字库,TCP / IP堆栈的UNIX标准),并重写代码的某些部分 - 不多,但有些部分。< / p>

    一些有价值信息的相关问题:

    Differences between winsock and BSD socket implementations

    Some Issues About Cygwin[Linux in Windows] (socket,thread,other programming and shell issues)

    Examples for Winsock?

答案 1 :(得分:1)

使用BSD标准为您提供跨平台网络应用程序编写并不容易。当然它会工作,但你必须做一些替换,如用ioctlsocket(在Windows上)替换ioctl(如果需要)。更多差异here

我的建议是使用一个隐藏这些丑陋差异的库,并提供统一的沟通方式。我个人使用ACE。您有大量示例向您展示如何创建服务器和客户端。从样本中复制,看看他们是如何做到的。他们的邮件列表也很有帮助(不要忘记使用PRF - 请参阅问题 - 报告表格的源代码树)。您可以借阅书籍以获取更多信息。重要提示:通过使用ace,您可以使用ACE包装器函数,如socket,setsockopt,ioctl等,而无需担心它们无法正常工作。不幸的是,这增加了一个库依赖,这并不总是一个选项。但ACE具有更强大的功能,一旦你发现它们我相信你会喜欢它。提示:Reactor,Proactor。

答案 2 :(得分:0)

我认为您正在寻找Winsock库。