7

我想知道,如何在 Java 虚拟机中实现套接字。

  • 是否包含本机库?
  • 如果,它是一个 C 库吗?

我在哪里可以找到有关此主题的信息?关于网络的官方 Java 教程对我没有帮助。

一些有趣的链接会有所帮助。

更新:Sun 是否提供了任何官方信息?

提前致谢!

编辑 我找到了一个证明,我将我的答案标记为正确的。感谢奥斯卡,这对我来说是完美的暗示!!!谢谢!

4

3 回答 3

5

可能是使用了底层平台暴露的system-V socket调用,比如Unix下的system-V,Windows下的WinSock。该规范仅规定了虚拟机必须如何运行,因此实现者可以自由地为所欲为。

于 2009-01-13T06:52:48.957 回答
5

Java 是开源的,因此您可以获取源代码以自定进度深入检查该类。

作为对您问题的开始和快速回答,这是我在快速扫描中发现的内容:

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

所以是的,包含了一个本地库,我猜它是一个 C++ 库。

有许多实现(SSLSocket、PlainSocket 等)

JDK7 的在线资源在这里 :S不知道它是最新的

我使用我的 IDE 来浏览每个 JDK 安装附带的源代码。

显示 Socket 来源的 IDE 截图 http://img83.imageshack.us/img83/5358/socketimpfv3.png

于 2009-01-13T06:54:44.850 回答
3

Java 1.4.2 的网络指南中,提供了一条有趣的信息:

实施细则...

...你不需要知道,除非你继承了 SocketImpl/DatagramSocketImpl。每个 *Socket 对象都有一个底层的 SocketImpl/DatagramSocketImpl 来连接本地代码。Impl 类实现了两种方法来支持选项:

void setOption(int optID, Object val) 抛出 SocketException;对象 getOption(int optID) 抛出 SocketException;

看起来很像 C。这些方法充当本机方法的粘合剂,并在调用本机方法之前确保类型安全。

所以我认为它是经过验证的:Java 使用本地库作为套接字。

于 2009-01-13T17:52:20.310 回答