2009-01-13 40 views
4

我想知道,在Java虛擬機中如何實現套接字。在JVM中如何實現套接字?

  • 是否包含本機庫?
  • 如果它是C庫嗎?

我在哪裏可以找到關於此主題的信息? offical Java tutorial on networking不幫我在那裏。

一些有趣的鏈接將有所幫助。

更新: 有沒有Sun提供的官方信息?

在此先感謝!

編輯 我發現了一個證據,我將我的答案標記爲正確答案。感謝奧斯卡,這對我來說是完美的提示!謝謝!

回答

1

network guide of Java 1.4.2,一則有趣的信息提供:

實現細節...

...那你不需要知道,除非你 子類 SocketImpl/DatagramSocketImpl。 每個 *套接字對象具有一個底層SocketImpl/DatagramSocketImpl, 接口到本機代碼。的默認地將Impl 類實現兩種方法來 支持選項:

空隙的SetOption(INT optID,對象VAL) 拋出SocketException;對象 getOption(INT optID)拋出 SocketException;

看起來非常像C。這些方法 充當膠水的本地方法,並 確保類型安全調用本地 方法之前。

所以我認爲這是證明:Java使用本地庫的套接字。

+0

井1,從源我可以告訴方法是「天然的」因此使用,可能是在任一C,C++或彙編本機庫。至於報價,文件沒有運行軟件。 :)無論如何,你的問題的基本原理是什麼? – OscarRyz 2009-01-14 01:43:06

4

可能使用底層平臺公開的system-V套接字調用,例如, Unix下的system-V,Windows下的WinSock。該規範僅規定了虛擬機必須如何操作,因此實施者可以隨意按照自己的意願進行操作。

5

Java是開源的,因此您可以獲取源代碼,以便對課程進行自我深度檢查。

作爲啓動和快速的答案在這裏你的問題是我在一個非常快速掃描發現:

private native void socketConnect(InetAddress address, int port, int timeout) 

因此葉氏,一個本地庫包括在內,我想這是一個C++庫。

有許多實現(SSLSocket時,PlainSocket等)的

JDK7的在線來源是here:S 不知道如何保持最新的是

我用我的IDE瀏覽每個JDK安裝附帶的源代碼。

IDE screenshot showing the source of Socket http://img83.imageshack.us/img83/5358/socketimpfv3.png

+0

很難以紀念這個問題的答案,因爲我需要一個官方的引用o.s.e.當然 – guerda 2009-01-13 12:14:21