如何在JVM中实现套接字?

时间:2009-01-13 06:47:15

标签: java sockets network-programming jvm

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

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

我在哪里可以找到有关此主题的信息? offical Java tutorial on networking对我没有帮助。

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

更新: 是否有Sun提供的官方信息?

提前致谢!

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

3 个答案:

答案 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使用本机库作为套接字。