2012-09-30 142 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套接字之間的實際網絡代碼庫是相同的。