Передача данных СЃ использованием сокетов Р’ библиотеке классов Java есть очень СѓРґРѕР±РЅРѕРµ средство, СЃ помощью которых можно организовать взаимодействие между приложениями Java Рё аплетами, работающими как РЅР° РѕРґРЅРѕРј Рё том же, так Рё РЅР° разных узлах сети TCP/IP. Рто средство, родившееся РІ РјРёСЂРµ операционной системы UNIX, - так называемые сокеты (sockets). Что такое сокеты? Р’С‹ можете представить себе сокеты РІ РІРёРґРµ РґРІСѓС… розеток, РІ которые включен кабель, предназначенный для передачи данных через сеть. Переходя Рє компьютерной терминологии, скажем, что сокеты - это программный интерфейс, предназначенный для передачи данных между приложениями. Прежде чем приложение сможет выполнять передачу аили прием данных, РѕРЅРѕ должно создать сокет, указав РїСЂРё этом адрес узла IP, номер порта, через который Р±СѓРґСѓС‚ передаваться данные, Рё тип сокета. РЎ адресом узла IP РІС‹ уже сталкивались. Номер порта служит для идентификации приложения. Заметим, что существуют так называемые "хорошо известные" (well known) номера портов, зарезервированные для различных приложений. Например, РїРѕСЂС‚ СЃ номером 80 зарезервирован для использования серверами Web РїСЂРё обмене данными через протокол HTTP. Что же касается типов сокетов, то РёС… РґРІР° - потоковые Рё датаграммные. РЎ помощью потоковых сокетов РІС‹ можете создавать каналы передачи данных между РґРІСѓРјСЏ приложениями Java РІ РІРёРґРµ потоков, которые РјС‹ уже рассматривали РІРѕ второй главе. Потоки РјРѕРіСѓС‚ быть входными или выходными, обычными или форматированными, СЃ использованием или без использования буферизации. РЎРєРѕСЂРѕ РІС‹ убедитесь, что организовать обмен данными между приложениями Java СЃ использованием потоковых сокетов РЅРµ труднее, чем работать через потоки СЃ обычными файлами. Заметим, что потоковые сокеты позволяют передавать данные только между РґРІСѓРјСЏ приложениями, так как РѕРЅРё предполагают создание канала между этими приложениями. Однако РёРЅРѕРіРґР° нужно обеспечить взаимодействие нескольких клиентских приложений СЃ РѕРґРЅРёРј серверным или нескольких клиентских приложений СЃ несколькими серверными приложениями. Р’ этом случае РІС‹ можете либо создавать РІ серверном приложении отдельные задачи Рё отдельные каналы для каждого клиентского приложения, либо воспользоваться датаграммными сокетами. Последние позволяют передавать данные сразу всем узлам сети, хотя такая возможность редко используется Рё часто блокируется администраторами сети. Для передачи данных через датаграммные сокеты вам РЅРµ нужно создавать канал - данные посылаются непосредственно тому приложению, для которого РѕРЅРё предназначены СЃ использованием адреса этого приложения РІ РІРёРґРµ сокета Рё номера порта. РџСЂРё этом РѕРґРЅРѕ клиентское приложение может обмениваться данными СЃ несколькими серверными приложениями или наоборот, РѕРґРЅРѕ серверное приложение - СЃ несколькими клиентскими. Рљ сожалению, датаграммные сокеты РЅРµ гарантируют доставку передаваемых пакетов данных. Даже если пакеты данных, передаваемые через такие сокеты, дошли РґРѕ адресата, РЅРµ гарантируется, что РѕРЅРё Р±СѓРґСѓС‚ получены РІ той же самой последовательности, РІ которой были переданы. Потоковые сокеты, напротив, гарантируют доставку пакетов данных, причем РІ правильной последовательности. Причина отстутствия гарантии доставки данных РїСЂРё использовании датаграммных сокетов заключается РІ использовании такими сокетами протокола UDP, который, РІ СЃРІРѕСЋ очередь, основан РЅР° протоколе СЃ негарантированной доставкой IP. Потоковые сокеты работают через протокол гарантированной доставки TCP. |