Программный доступ к сетевым параметрам
Java SE 6.0, кодовое название Mustang, быстро приближается к бета-2-досрочном освобождении доступа. Одним из дополнительных функций в Java SE 6 позволяет получить доступ к информации больше, чем вы могли получить доступ ранее о сетевых интерфейсах. Она не является редкостью иметь системы, работающие с несколькими активных сетевых соединений, таких, как проводная, 802.11 / B / G Wireless, и Bluetooth. Предыдущие версии J2SE была ограниченная поддержка для обеспечения доступа к открытой информации, связанной с несколькими соединениями. Java SE 6 расширяет эту возможность.
Представлен в J2SE 1.4, класс NetworkInterface предоставляет доступ к некоторой информации о сетевых интерфейсах. Вы можете использовать getNetworkInterfaces () в NetworkInterface информацию о множестве установленных сетей, или поиска конкретной сети с getByName () или getByInetAddress () методы. Затем можно отобразить информацию о сетевых интерфейсов, таких как имя или его InetAddress. Чтобы увидеть, какого рода информацию вы могли бы доступ с помощью NetworkInterface, запустите следующую программу, ListNets, в J2SE 5.0:
|
Если вы запустите программу ListNets на типичной машине Microsoft Windows, ваш результат должен выглядеть следующим - отображение наименования и адреса могут быть разными на основе текущей оборудования и установки:
Display name: MS TCP Loopback interface Name: lo InetAddress: /127.0.0.1 Display name: Intel(R) PRO/100 VE Network Connection - Packet Scheduler Miniport Name: eth0 Display name: RCA USB Cable Modem - Packet Scheduler Miniport Name: eth1 InetAddress: /11.22.33.44
Linux машины будет иметь аналогичный вывод для имен, но имеют разные названия и, возможно отображение различных адресов.
В таких методов, как isMCGlobal () и isMCSiteLocal (), информация, которую можно получить о каждом InetAddress в большей степени связано с групповой и адрес типа, то о сетевом интерфейсе себя. Это сетевая информация, связанная теперь доступна с классом NetworkInterface в Java SE 6.0.
Сетевые интерфейсы могут быть иерархически организованным. Класс NetworkInterface в Java SE 6.0 включает два метода, GetParent () и getSubInterfaces (), которые имеют отношение к иерархии сетевого интерфейса. GetParent () возвращает родителя NetworkInterface из интерфейса. Иными словами, если что-то подинтерфейсом, GetParent () возвращает ненулевое значение. GetSubInterfaces () возвращает все подинтерфейсов по сетевому интерфейсу.
Вы можете обнаружить, если сетевой интерфейс "вверх" (то есть, бег) с ISUP () метод. Существуют также методы, которые говорят вам тип сетевого интерфейса: isLoopback () сообщает вам, если сетевой интерфейс, интерфейс обратной связи, isPointToPoint () сообщает вам, если это "точка-точка", а isVirtual () сообщает вам, если свой виртуальный интерфейс.
Помимо основной информации о состоянии, вы можете получить доступ к другим параметрам сети о сетевом интерфейсе такие, как свой физический адрес оборудования (как с массивом байтов) и максимальный (MTU) (максимальный размер пакета).
Последний пункт информации, доступной для каждого NetworkInterface приводится перечень новых интерфейс, который называется InterfaceAddress. Это дает вам InetAddress для этого адреса, широковещательного адреса и маски подсети.
Вот обновленная версия программы ListNets которая использует NetworkInterface усовершенствования:
|
Запуск обновленного ListNets в Java SE 6.0. Опять же, результат зависит от конфигурации системы. Обратите внимание, что некоторая информация может быть доступна по соображениям безопасности.
> java ListNets Display name: MS TCP Loopback interface Name: lo InetAddress: /127.0.0.1 Parent: null Up? true Loopback? true PointToPoint? false Supports multicast? false Virtual? false Hardware address: null MTU: 1520 InterfaceAddress: /127.0.0.1 Broadcast Address: /127.255.255.255 Network Prefix Length: 8 Display name: Intel(R) PRO/100 VE Network Connection - Packet Scheduler Miniport Name: eth0 Parent: null Up? false Loopback? false PointToPoint? false Supports multicast? false Virtual? false Hardware address: [0, 1, 2, 3, 4, 5] MTU: 1500 Display name: RCA USB Cable Modem - Packet Scheduler Miniport Name: eth1 InetAddress: /11.22.33.44 Parent: null Up? true Loopback? false PointToPoint? false Supports multicast? false Virtual? false Hardware address: [0, 2, 3, 4, 5, 6] MTU: 1500 InterfaceAddress: /11.22.33.44 Broadcast Address: /11.22.33.255 Network Prefix Length: 22
Вывод показывает, что соединение с сетью eth1 истекло, и подключены к сети Интернет с IP-адресом 11.22.33.44. Она также показывает, что сетевое соединение eth0 вниз. Loopback Интерфейс Up (и всегда должны быть выше).
Сравните результаты программы на то, что вы получите от чего-то, как команда Ipconfig (с / все опции). Вы увидите, очень похожие результаты.
Для получения дополнительной информации о сетевых программ с платформой Java, см. в The Java Tutorial.
Copyright (C) 2004-2005 Sun Microsystems, Inc
Все права защищены.
Проверить, если страница существует
Приведенный ниже пример показывает способ проверить веб-страницу, существует или нет.
|
Ниже делать то же самое, но на этот раз мы отождествляем ourself для прокси-сервера.
|
Как обнаружить прокси-сервера для интернет соедини
Java SE 1.5 обеспечивает ProxySelector класс для обнаружения прокси-сервера. Если есть прямое подключение к Интернету тип прокси прямым иначе оно вернется хост и порт.
Пример ниже иллюстрирует эту функциональность:
|
Как получить IP-адрес хоста
Этот совет Java иллюстрирует метод определения IP адреса по имени хоста. Разработчик может использовать этот код в клиент-сервер или приложения многопользовательских где это необходимо знать IP-адрес клиента, откуда пришел запрос.
|
Получить дату с сервера
Это можно сделать, открыв сокет к порту "дневной" (порт 13) (на Unix или NT машину).
|
Как определить IP-адрес и имя локального MA
Этот совет Java демонстрирует метод определения IP адрес и имя локального компьютера. Разработчик может использовать это для внутренней обработки в своих приложениях. Это может быть реализована на стороне клиента для передачи IP адрес и имя хоста на сервере.
|
Как я могу отправить широковещательные пакеты в Java
Вещания определяется как отправка пакет для всех узлов сети на подсети. Подсеть IP сетевая маска делит IP адрес на две части: идентификатор сети и узлов идентификатора. Широковещательный адрес определяется как адрес IP, где установлены все биты узла идентификатора.
Таким образом, посылается широковещательный пакет из программы Java (или из программы на любом другом языке, если на то пошло), просто требует от вас указать широковещательный адрес в качестве пункта назначения для пакета.
User Datagram Protocol программирования
Это часто бывает, что когда кто-то показывает, некоторые сетевые программирования, который использует стандартные библиотеки, J2SE, код для розетки модель, основанная на использовании Transmission Control Protocol / Internet Protocol (TCP / IP). TCP / IP используется для интернет-общения, такие задачи, как отправка электронной почты с помощью Simple Mail Transfer Protocol (SMTP), серфинге в Интернете через Hypertext Transfer Protocol (HTTP), и просмотр новостей через сеть протокол передачи новостей (NNTP). Что TCP / IP гарантий доставки сообщения.
Короче говоря, часть из IP TCP / IP движется пакетов данных от узла к узлу. Части TCP обертывания адресами источника и назначения, а также порты с информацией последовательность и содержание. Когда набор пакетов из исходного адреса прибывает в место назначения, целевой хост может resequence пакетов в их первоначальном тем, что получатель может прочитать данные в первоначальном порядке оно было отправлено.
Если вы являетесь пользователем классы, такие как розетки и URL, TCP / IP заботится многие детали, касающиеся общения. Так, например, TCP / IP определяет смещение в заголовке, чтобы хранить последовательность и номеров подтверждения для пакетов TCP. Кроме того, инкапсуляции пакетов TCP является то, что называется пакета IP датаграммы. Упаковка датаграммы, когда делаете TCP / IP-программирование также сделали для вас.
Однако могут иметь место случаи, когда TCP / IP обеспечивает больше, чем вам нужно. Например, что если вам не нужна, чтобы гарантировать доставку сообщений, или вы не хотите, чтобы с задержкой представил ретрансляцию пакетов, или вам не нужны данные, которые будут читать в оригинале тем оно было отправлено ? В этих случаях можно использовать альтернативу TCP / IP называется User Datagram Protocol (UDP). При работе с UDP, вы все еще посылать пакеты по протоколу IP, но нет никакой гарантии, доставки или заказа. Почему может быть доставка не важно? Представьте себе, создав программу, чтобы все машины в офисе должно работать. Каждые несколько секунд каждая машина посылает "I'm Alive" сообщений на центральный сервер. Имеет ли значение, "I'm Alive" сообщения потеряны? Ответ, как правило, нет. Существует ничего, что отправитель сообщения может сделать, кроме отправить сообщение, и он собирается отправить то же сообщение в несколько секунд. Кроме того, не все ли равно, если сообщения не приходят в точном порядке? Опять же, для этого типа сообщений: Нет, это не имеет значения. Вы действительно беспокоит то, что сообщение приходит 10:05 на 10:10? Не совсем так. Конечно, для High-End Фондовой Торговой Системы вы не хотите терять информацию о ценах, но и для низких биржевых приоритетом, это действительно вопрос, если вы пропустите изменения цен? Когда пришло время сделать что торговля акциями, вам необходимо будет снова проверить в любом случае. На самом деле, используя TCP может иметь пагубные последствия в случае их отсутствия пакетами возмущаться получить в режиме реального времени данные. Своевременное, а не упорядоченным и надежной доставки является более важным в случае реального времени.
UDP программирование предполагает DatagramPacket и DatagramSocket классы пакета java.net. DatagramPacket содержит информацию для отправки, в том числе определение, куда отправить эти данные. DatagramSocket используется для передачи и приема пакетов.
DatagramPacket класс включает в себя шесть конструкторов:
- DatagramPacket(byte[] buf, int length, InetAddress address, int port)
- DatagramPacket(byte[] buf, int offset, int length, InetAddress address, int port)
- DatagramPacket(byte[] buf, int offset, int length, SocketAddress address)
- DatagramPacket(byte[] buf, int length, SocketAddress address)
- DatagramPacket(byte[] buf, int length)
- DatagramPacket(byte[] buf, int offset, int length)
Обратите внимание, что список конструкторов состоит из трех пар. Первые две пары конструкторы использовали для создания пакетов для передачи. Конструкторы в первой паре использовать InetAddress для адреса назначения. Конструкторы во второй паре использовать SocketAddress. Окончательный пару конструкторы использовали для получения пакетов. Нет источника или адреса назначения необходимо в этих конструкторов.
После создания пакета, процесс отправки или получения оно предполагает телефону передавать или получать методом DatagramSocket. Говоря более конкретно, созданием пакета, то вы создаете сокет. После создания сокета, вы вызываете отправить метода DatagramSocket для передачи датаграмм пакетов или использовать получают методом DatagramSocket получать пакет. Вы также можете использовать тот же DatagramSocket для передачи и приема нескольких пакетов, каждый будет по разным каналам и из разных источников.
Вот пример, который отправляет и получает датаграммы пакетов:
|
Приняв имя сервера, работает дневной службе в программу, Вы можете получить время на месте для этой машины. Например:
java GetTime localhost Checking at: localhost/127.0.0.1 The time at localhost is: Fri Apr 2 11:30:46 2004
Одна потенциальная проблема с этим пример относится к вопросам безопасности. По соображениям безопасности, наиболее доступной через сеть машины выключить неосновные услуги и отключить соединение через UDP межсетевых экранов. Таким образом, вы можете не найти доступный компьютеру с дневной службы. Linux пользователи могут запустить сервис и подключиться к их собственной машины. Другой вариант (и для тех, кто не startable службы), является использование приспособленец показано ниже. Приспособленец использует тот же DatagramPacket и DatagramSocket классы для создания сервера для этой программы.
Новые DatagramSocket (DAYTIME_PORT) линии в приспособленец значит, что вы хотите послушать на любом порту определяется в DAYTIME_PORT. Программа не будет ждать, пока вы делаете звонок на получают методом. Как и в случае, когда вы отправите запрос, то вы должны создать для пакетов данных. Дневной службе игнорирует содержимое пакета, но вы все равно должны создать пакет получит запрос. Чтобы отправить назад в ответ на DatagramPacket, вам нужно задать получаемого пакета, куда отправлять ответ.
Вот программа приспособленец:
|
Если вы на машине, которая не позволяет разрешение на создание службы по низким порта, например 13, изменить порт, как в классе клиент GetTime и класс приспособленец.
Составление и начать первый класс приспособленец. Это будет работать всегда, просто время реагирования на просьбы таких как одну прислали, когда вы запустите GetTime класс.
Если вы не знакомы с дневной службы, это определено в RFC 867.
Для получения дополнительной информации о датаграмм, см. сетей тропе в Java Tutorial.
Copyright (C) 2004-2005 Sun Microsystems, Inc
Все права защищены.
Опубликовать сообщение на сервер, используя новостей NNTP Pro
Эта подсказка показывает, как отправить сообщение на сервер, используя новостей NNTP протокола.
|
Читать сообщения от сервера новостей
Эта подсказка показывает, как читать сообщения от сервера новостей.
|