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

在windows上使用sys/socket.h函数,c,windows,sockets,C,Windows,Sockets,我正在尝试在Windows中使用socket.h函数。基本上,我目前正在查看的示例代码是。我知道socket.h是一个Unix函数——在编译此示例代码时,我是否可以轻松地模拟该环境?不同的IDE/编译器会改变什么吗 否则,我认为我需要利用虚拟化的Linux环境,这可能是最好的,因为代码很可能在UNIX环境中运行 谢谢。我想你在找图书馆。你有两个选择: 使用(Unix仿真库) 端口到(Windows标准库) Cygwin:允许您编译Unix源代码,但基本上不受影响,但将您绑定到Cygwin仿真库。

我正在尝试在Windows中使用socket.h函数。基本上,我目前正在查看的示例代码是。我知道socket.h是一个Unix函数——在编译此示例代码时,我是否可以轻松地模拟该环境?不同的IDE/编译器会改变什么吗

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


谢谢。

我想你在找图书馆。

你有两个选择:

  • 使用(Unix仿真库)
  • 端口到(Windows标准库)
  • Cygwin:允许您编译Unix源代码,但基本上不受影响,但将您绑定到Cygwin仿真库。这有两个含义:总体性能——不仅仅是网络性能——可能会低于最佳性能;并且目标环境必须(在运行时)安装Cygwin DLL

    Winsock:这要求您将
    sys/socket.h
    (BSD sockets库,用于TCP/IP堆栈的UNIX标准)替换为
    winsock2.h
    ,并重写代码的某些部分-不是很多,而是一些

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


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


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

    +1用于winsock和示例。我一直在使用winsock。为了将Unix程序移植到Windows,我只需要更改一小部分代码。这很简单。但另一方面还有更多惊喜:)例如,windows上的
    select
    忽略了第一个参数,因此winsock程序员自然会将
    maxfd
    的值设为零。Royal pain:)2021更新-另一个选项是MSYS2,它是cygwin的一个分支,具有类似的考虑因素-二进制文件必须与MSYS2运行时DLL一起分发。