2012-09-30 43 views
1

我明白的Winsock是用于Windows操作系统的网络和BSD是Mac OS和Unix。是否有某种类型的“通用”套接字适用于上述三种操作系统中的任何一种?或者,服务器是否必须将两个套接字以某种方式并入其中,以便与不同OS的客户端兼容?如果你避免一些更高级的功能网络跨多个操作系统

回答

1

Winsock和BSD套接字是两个类似的API的名字既实现同样的事情:TCP/IP套接字,而这又是TCP连接或UDP数据报流的终点。由于实际传输由TCP/IP RFC定义,因此它们可以互操作。因此没有必要在Unix上使用Winsock实现,或者在Windows上使用BSD套接字实现。事实上,后者就是Winsock或多或少的,在这里和那里模成一些误解。

总之,你的问题并没有真正意义。

+0

我不知道他们是如此相似,这是我的问题的一个利益点。 – LucasS

+1

@LucasS他们的全部目的是相似的。我通过iPad或Windows笔记本电脑在这里发帖:服务器可能是运行Java的Solaris机器。这就是互联网。 – EJP

0

Winsock的是BSD兼容。诀窍是在处理非字节数据时要考虑endianess。取决于您的架构和语言,浮点可能会变得棘手。 char数组将保持事物的可预测性,但这可能是有限的。如果遵循协议,则只需要一台服务器。

1

套接字是插座,他们只是泵数据。因此,您可以在Windows上使用Java编程服务器,在BSD上使用C编程的客户端,他们仍然可以相互通信。

进行交叉编译,而无需使用第三方库,你可以更多或更不容易通过使用一些的#ifdefs做到这一点,多看@http://tangentsoft.net/wskfaq/articles/bsd-compatibility.html

另一种方法是使用第三方库,可能最简单的方式,可以发挥其他优势,如更先进的功能等。 UDT让人想起,但还有其他的。 (http://udt.sourceforge.net/

+1

只有满足POSIX标准的套接字可以在多个OS上分区。例如Berkley Sockets。 http://en.wikipedia.org/wiki/Berkeley_sockets –

+0

Upvoted毫无意义的无法解释的不正确downvote。 – EJP

+2

@JanKoester废话。声称是TCP套接字的套接字在所有RFC兼容的TCP实现中都是兼容的。 TCP不是由POSIX定义的。例如Java套接字不符合POSIX标准。 – EJP

1

这里有一个小秘密:Winsock的是基于BSD套接字。除了初始化和关闭winsock库之外,BSD和Windows套接字之间的实际网络代码库是相同的。