如何在JVM中实现套接字?

gue*_*rda 5 java sockets jvm network-programming

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

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

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

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

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

提前致谢!

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

Rob*_*Rob 5

可能使用底层平台公开的system-V套接字调用,例如Unix下的system-V,Windows下的WinSock。该规范仅规定了虚拟机必须如何运行,因此实施者可以自由地按照自己的意愿行事。


Osc*_*Ryz 5

Java是开源的,因此您可以获取源代码,以便对课程进行自定进度的深入检查.

作为您的问题的开始和快速回答,这是我在一个非常快速的扫描中发现的:

private native void socketConnect(InetAddress address, int port, int timeout)
Run Code Online (Sandbox Code Playgroud)

所以,包括原生lib,我猜它是一个C++库.

有许多实现(SSLSocket,PlainSocket等)

JDK7的在线来源是这里 :S 不知道如何保持最新的是

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

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


gue*_*rda 3

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

实施细则...

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

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

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

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