我想知道,Java虚拟机中是如何实现套接字的。
我在哪里可以找到有关此主题的信息? offical Java tutorial on networking对我没有帮助。
一些有趣的链接会有所帮助。
更新: 是否有Sun提供的官方信息?
提前致谢!
修改 我找到了一个证明,我把答案标记为正确答案。感谢奥斯卡,这对我来说是完美的暗示!谢谢!
答案 0 :(得分: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
答案 1 :(得分:4)
可能使用由底层平台公开的系统-V套接字调用,例如: Unix下的system-V,Windows下的WinSock。规范只规定虚拟机必须如何运作,因此实施者可以随心所欲地做。
答案 2 :(得分:1)
在network guide of Java 1.4.2中,提供了一条有趣的信息:
实施细节......
......你不需要知道,除非你 子类 的SocketImpl / DatagramSocketImpl数据。的每 * Socket对象有一个底层的SocketImpl / DatagramSocketImpl 接口到本机代码。 Impl 类实现了两种方法 支持选项:
void setOption(int optID,Object val) 抛出SocketException;宾语 抛出getOption(int optID) SocketException;
看起来很像C 。这些方法 充当本机方法的粘合剂,和 在本机之前确保类型安全 方法被调用。
所以我认为它已被证明:Java使用本机库作为套接字。