gue*_*rda 5 java sockets jvm network-programming
我想知道,Java虚拟机中如何实现套接字.
我在哪里可以找到有关此主题的信息?关于网络的官方Java教程对我没有帮助.
一些有趣的链接会有所帮助
更新:Sun是否提供任何官方信息?
提前致谢!
编辑 我找到了证据,我将答案标记为正确答案.感谢奥斯卡,这对我来说是完美的暗示!谢谢!
可能使用底层平台公开的system-V套接字调用,例如Unix下的system-V,Windows下的WinSock。该规范仅规定了虚拟机必须如何运行,因此实施者可以自由地按照自己的意愿行事。
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
在Java 1.4.2的网络指南中,提供了一条有趣的信息:
实施细则...
...你不需要知道,除非你继承 SocketImpl/DatagramSocketImpl 的子类。每个 *Socket 对象都有一个与本机代码接口的底层 SocketImpl/DatagramSocketImpl。Impl 类实现两种方法来支持选项:
void setOption(int optID, Object val) 抛出 SocketException;对象 getOption(int optID) 抛出 SocketException;
看起来很像 C。这些方法充当本机方法的粘合剂,并在调用本机方法之前确保类型安全。
所以我认为这是经过验证的:Java 使用套接字的本机库。