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

我试图利用Windows中的socket.h函数。 基本上,我目前正在http://beej.us/guide/bgnet/output/html/multipage/clientserver.html#datagram看示例代码。 我明白,socket.h是一个Unix函数 – 有无论如何,我可以在编译此示例代码时轻松地模拟该环境? 不同的IDE /编译器会改变什么吗?

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

谢谢。

你有两个选择:

  1. 使用Cygwin (Unix模拟库)。
  2. 端口到Winsock (Windows标准库)。

第一个选项允许你编译你的Unix源代码大部分是未触及过的,但是将它与Cygwin模拟库联系起来(这意味着在运行时有两件事情:一般性能 – 不仅仅是网络 – 可能不是最优的;运行环境必须有Cygwin DLL可用)。 第二种方法要求用sys/socket.h代替sys/socket.h (BSD套接字库,TCP / IP协议栈的UNIX标准),并且重写代码的一些部分 – 不是很多,而是一些。

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

winsock和BSD套接字实现之间的区别

关于Cygwin的一些问题[Windows中的Linux](套接字,线程,其他编程和shell问题)

Winsock的例子?

使用BSD标准为您提供的跨平台网络应用程序并不容易。 当然,它会工作,但你将不得不做一些替换,如用ioctlsocket(在窗口)替换ioctl(如果需要)。 这里有更多的区别

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

我想你正在寻找Winsock图书馆。