我知道 Winsock 用于 Windows 操作系统上的网络,而 BSD 用于 Mac OS 和 Unix。是否有某种类型的“通用”套接字可以在提到的三个操作系统中的任何一个上工作?或者服务器是否必须以某种方式将两个套接字合并到其中以与不同操作系统的客户端兼容?
4 回答
套接字是套接字,它们只是泵送数据。因此,您可以在 Windows 上使用 Java 编写服务器,在 BSD 上使用 C 编写客户端,它们仍然可以相互通信。
对于不使用 3rd 方库的交叉编译,您可以通过使用一些#ifdefs 或多或少轻松地做到这一点,请参阅更多@ http://tangentsoft.net/wskfaq/articles/bsd-compatibility.html
另一种方法是使用 3rd 方库,这可能是最简单的方法,并且可以发挥其他优势,例如更高级的功能等。想到了 UDT,但还有其他的。( http://udt.sourceforge.net/ )
这里有个小秘密:Winsock 基于 BSD 套接字。除了初始化和关闭 winsock 库之外,BSD 和 Windows 套接字之间的实际网络代码库是相同的。
Winsock 和 BSD 套接字是两个相似的 API 的名称,它们都实现相同的东西:TCP/IP 套接字,它们又是 TCP 连接或 UDP 数据报流的端点。因为实际的传输是由 TCP/IP RFC 定义的,所以它们可以互操作。因此没有必要在 Unix 上实现 Winsock 或在 Windows 上实现 BSD 套接字。实际上,后者或多或少是 Winsock 的样子,以这里和那里的一些误解为模。
简而言之,您的问题没有任何意义。
如果您避免使用一些更高级的功能,Winsock 与 BSD 兼容。诀窍是在处理非字节数据时尊重字节顺序。根据您的架构和语言,浮点数可能会变得棘手。Char 数组将使事情保持可预测性,但这可能是有限的。如果遵循协议,您只需要一台服务器。