2009-01-13 41 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