Одним из распространенных способов передачи музыки и авторских передач слушателям-клиентам в формате интернет-радио является интернет-трансляция, то есть непрерывная передача информации от сервера клиентам с возможным наличием потерь. Каждый новый клиент начинает получать передаваемые данные с момента подключения, при этом никак не влияя на получение тех же данных как предыдущими, так и последующими клиентами.
Основной целью работы было тестирование взаимодействия через сеть написанных на ЯП Java приложений; для этого была определена задача - создание клиент-серверного приложения для считывания, передачи через локальную сеть и Интернет, а так же воспроизведения аудиофайлов.
Современные приложения для организации аудиоконференций делятся на две категории – использующие формат “клиент-клиент” (подразумевающий, что каждый участник конференции одновременно получает и передаёт данные всем остальным участникам конференции) и “сервер-клиенты” (при использовании которого все исходящие данные от клиентов передаются на сервер, после чего они передаются всем клиентам обратно). Каждый из этих форматов имеет свои недостатки, которые были учтены в процессе разработки решения задачи.
Для работы со звуком в Java используется стандартный пакет javax.sound, для передачи потока данных используется тип TargetDataLine. Для считываемого звука задаётся новый формат (AudioFormat), аргументом является шаблонный файл, с которого копируется вся необходимая информация.
Благодаря технологии сокетов (объектов стандартного пакета java.net), совмещающих в себе информацию об IP-адресе и порте, через который передаются данные, программирование сетевых решений на Java значительно облегчено в сравнении с конкурирующими языками программирования.
Сервер транслирует информацию клиентам, не сохраняя её. В случае многопоточного приложения для каждого нового клиента создаётся отдельный поток, отвечающий только за этого клиента и взаимодействие с ним. При большом количестве клиентов такой подход оказывается ресурсоемким. Поэтому передача данных клиентам осуществляется в асинхронном режиме. При запуске клиента необходимо ввести адрес сервера в локальной сети и желаемое имя пользователя. Получаемые клиентом файлы воспроизводятся и заменятся новыми.
1