Как сокеты реализованы в JVM? - PullRequest
4 голосов
/ 13 января 2009

Я хочу знать, как сокеты реализованы в виртуальной машине Java.

  • Есть ли встроенная библиотека?
  • А если это библиотека C?

Где я могу найти информацию по этой теме? Официальное руководство по Java по работе в сети мне здесь не поможет.

Некоторые интересные ссылки помогут.

Обновление: Есть ли официальная информация от Sun?

Заранее спасибо!

Редактировать Я нашел доказательство, я отмечаю свой ответ как правильный. Спасибо Оскару, это был идеальный намек для меня !!! СПАСИБО!

Ответы [ 3 ]

5 голосов
/ 13 января 2009

Java имеет открытый исходный код, поэтому вы можете получить исходный код для самостоятельного глубокого изучения класса.

Для начала и быстрого ответа на ваш вопрос вот что я нашел в очень быстром сканировании:

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

Так что да, встроенная библиотека включена, и я предполагаю, что это библиотека C ++.

Существует несколько реализаций (SSLSocket, PlainSocket и т. Д.)

Интернет-источник JDK7 здесь : S Не уверен, насколько он актуален

Я использовал мою IDE для навигации по исходному коду, который поставляется с каждой установкой JDK.

Снимок экрана IDE, показывающий источник Socket http://img83.imageshack.us/img83/5358/socketimpfv3.png

4 голосов
/ 13 января 2009

Возможно использование вызовов сокета system-V, предоставляемых базовой платформой, например system-V под Unix, WinSock под Windows. Спецификация только определяет, как должна вести себя виртуальная машина, поэтому разработчики могут делать все, что пожелают.

1 голос
/ 13 января 2009

В сетевом руководстве Java 1.4.2 представлена ​​интересная информация:

Детали реализации ...

... что вам не нужно знать, если только вы подкласс SocketImpl / DatagramSocketImpl. Каждый * Объект Socket имеет базовый SocketImpl / DatagramSocketImpl, который интерфейсы для нативного кода. Impl классы реализуют два метода варианты поддержки:

void setOption (int optID, Object val) выдает SocketException; объект getOption (int optID) выбрасывает SocketException;

, что очень похоже на C . Эти методы действовать как клей к родным методам, и обеспечить безопасность типа перед родным методы вызываются.

Так что я думаю, что это доказано: Java использует собственные библиотеки для сокетов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...