рефераты конспекты курсовые дипломные лекции шпоры

Реферат Курсовая Конспект

Описание соккетов на языке java

Описание соккетов на языке java - раздел Связь, Соккеты. Прежде Чем Приложение Сможет Выполнять Передачу Аили Прием Данных, ...

Соккеты. Прежде чем приложение сможет выполнять передачу аили прием данных, оно должно создать сокет, указав при этом адрес узла IP, номер порта, через который будут передаваться данные, и тип сокета. С адресом узла IP вы уже сталкивались. Номер порта служит для идентификации приложения. Заметим, что существуют так называемые "хорошо известные" (well known) номера портов, зарезервированные для различных приложений.Например, порт с номером 80 зарезервирован для использования серверами Web при обмене данными через протокол HTTP. Что же касается типов сокетов, то их два - потоковые и датаграммные.

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

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

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

К сожалению, датаграммные сокеты не гарантируют доставку передаваемых пакетов данных. Даже если пакеты данных, передаваемые через такие сокеты, дошли до адресата, не гарантируется, что они будут получены в той же самой последовательности, в которой были переданы.Потоковые сокеты, напротив, гарантируют доставку пакетов данных, причем в правильной последовательности.

Причина отстутствия гарантии доставки данных при использовании датаграммных сокетов заключается в использовании такими сокетами протокола UDP, который, в свою очередь, основан на протоколе с негарантированной доставкой IP. Потоковые сокеты работают через протокол гарантированной доставки TCP. Класс Socket Конструкторы класса Socket Чаще всего для создания сокетов в клиентских приложениях вы будете использовать один из двух конструкторов, прототипы которых приведены ниже: public Socket(String host,int port); public Socket(InetAddress address,int port); Первый из этих конструкторов позволяет указывать адрес серверного узла в виде текстовой строки, второй - в виде ссылки на объект класса InetAddress.

Вторым параметром задается номер порта, с использованием которого будут передаваться данные.В классе Socket определена еще одна пара конструкторов, которая, однако не рекомендуется для использования: public Socket(String host, int port, boolean stream); public Socket(InetAddress address, int port, boolean stream); В этих конструкторах последний параметр определяет тип сокета. Если этот параметр равен true, создается потоковый сокет, а если false - датаграммный.

Заметим, что для работы с датаграммными сокетами следует использовать класс DatagramSocket. Методы класса Socket Перечислим наиболее интересные, на наш взгляд, методы класса Socket.Прежде всего, это методы getInputStream и getOutputStream, предназначенные для создания входного и выходного потока, соответственно: public InputStream getInputStream(); public OutputStream getOutputStream(); Эти потоки связаны с сокетом и должны быть использованы для передачи данных по каналу связи.

Методы getInetAddress и getPort позволяют определить адрес IP и номер порта, связанные с данным сокетом (для удаленного узла): public InetAddress getInetAddress(); public int getPort(); Метод getLocalPort возвращает для данного сокета номер локального порта: public int getLocalPort(); После того как работа с сокетом завершена, его необходимо закрыть методом close: public void close(); И, наконец, метод toString возвращает текстовую строку, представляющую сокет: public String toString(); 1. Создание графического оформления Программа имеет вид: Все элементы выбираются из палитры инструментов имеющихся в используемой программе jBuilder v2.00. Для того что бы разместить выбранный элемент из панели, достаточно выделить его однократным нажатием, и «растянуть» до нужных размеров на рабочем пространстве (bevelPanel1) Самое верхний элемент, содержащий текст localhost называется choiceControl.

Это окно выбора IP номера компьютера для осуществления связи. Ниже следует элемент textFieldControl, в нём будет отображаться статус подключения.

Эти элементы находятся на вкладке JBCL. И нижние два окна jTextArea служат для передачи и приёма текста. Но следует отметить что подписи к этим окнам “Send:” и “Reciev:” создаются отдельным элементом textControl с панели инструментов.

Ещё есть четыре элемента jButton с вкладки Swing. Данные кнопки можно сказать не отличаются от кнопок вкладки JBCL, и выбираются произвольно. При создании кнопки, по умолчанию на ней буде надпись-название самого элемента кнопки.Для изменения этого текста нужно выделить кнопку однократным нажатием и на панели Inspector (правая часть экрана) и напротив строки text вписать нужный текст. 2. Опсание программы В начале любого приложения подключаются нужные библиотеки.

В Данном примере это: import java.awt.*; import java.awt.event.*; import borland.jbcl.control.*; import borland.jbcl.layout.*; import com.sun.java.swing.*; import java.net.*; import java.io.*; import java.util.*; Далее описываем соккет, строковые переменные, входящий и выходящий потоки: Socket s; String str; InputStream is; OutputStream os; На следующем этапе создаём входной и выходной потоки, вызывая для этого методы getInputStream и getOutputStream, соответственно: is = s.getInputStream(); os = s.getOutputStream(); Далее приложение подготавливает буфер buf для приема данных и определяет переменную length, в которую будет записываться размер принятого блока данных: byte buf[] = new byte[512]; int lenght; Теперь все готово для запуска цикла приема и обработки строк от клиентского приложения.

Для создания подключения с сервером, пользуясь кнопкой “Connect”, выделим её в режиме Design, и в панели Inspector, на вкладке Events находим строку MouseClicked и нажимаем два раза по её полю. Автоматически переходите в раздел Source и описываем её: void jButton1_mouseClicked(MouseEvent e) { String adress; {adress = choiceControl1.getSelectedItem(); try { s=new Socket(adress,9999); is=s.getInputStream(); os=s.getOutputStream(); str=new String(buf,0,length); str="Connect"; buf=str.getBytes(); os.write(buf); length=is.read(buf); textFieldControl1.setText(str); jButton2.enable(); jButton2.setEnabled(true); jButton1.disable(); jButton1.setEnabled(false); jButton3.enable(true); } catch(Exception ioe) { } }} Первая строка генерируется автоматически программой после операции MouseClicked.

Затем мы обращаем внимание кнопки на оно в котором указывается путь соединения.

И наконец создаём соккет и потоки входящий и выходящий. Всё что идёт ниже, необязательно.В нашем случае это инициализация подключения, путём отправки слова Connect на сервер, после чего оно возвращается обратно при осуществлении подключения. Далее следует отключение на время некоторых кнопок, для исключения ошибок со стороны пользователя.

Ниже описания кнопок Disconnect: void jButton2_mouseClicked(MouseEvent e) { try { is.close(); os.close(); s.close(); } catch (Exception ioe){} } Sand: void jButton3_mouseClicked(MouseEvent e) { try{ String latter=jTextArea1.getText(); for(int i=0;i<latter.length();i++) os.write((byte)latter.charAt(i)); os.write(0); os.flush(); } catch(Exception ioe){} } Reciev: void jButton4_mouseClicked(MouseEvent e) { try { length=is.read(buf); String latter=new String(buf,0,length); jTextArea2.setText(latter); } catch(Exception ioe){} }} Строка os.write(buf) записывет данные в буфер, который в последствии через выходной поток может отправиться на сервер.

Соответственно что бы прочитать из потока, нужно воспользоваться следующим кодом: length=is.read(buf) Код приложения SocketClient import java.awt.*; import java.awt.event.*; import borland.jbcl. control.*; import borland.jbcl.layout.*; import com.sun.java.swing.*; import java.net.*; import java.io.*; import java.util.*; public class Frame1 extends DecoratedFrame { //Construct the frame BorderLayout borderLayout1 = new BorderLayout(); XYLayout xYLayout2 = new XYLayout(); BevelPanel bevelPanel1 = new BevelPanel(); JButton jButton1 = new JButton(); JButton jButton2 = new JButton(); JButton jButton3 = new JButton(); JButton jButton4 = new JButton(); TextFieldControl textFieldControl1 = new TextFieldControl(); TextControl textControl1 = new TextControl(); TextControl textControl2 = new TextControl(); JTextArea jTextArea1 = new JTextArea(); JTextArea jTextArea2 = new JTextArea(); ChoiceControl choiceControl1 = new ChoiceControl(); Socket s; int length; String str; InputStream is; OutputStream os; byte buf[]=new byte[512]; public Frame1() {enableEvents(AWTEvent.WINDOW_EVENT_MASK ); try{jbInit(); } catch (Exception e) { e.printStackTrace(); } } //Component initialization private void jbInit() throws Exception { this.setLayout(borderLayout1); this.setSize(new Dimension(433, 334)); this.setTitle("Frame Title"); choiceControl1.setItems(new String[] {"localhost", "192.168.1.14", "192.168.1.15", "192.168.1.16", "192.168.1.17", "192.168.1.18", "192.168.1.19", "192.168.1.20", "192.168.1.21",}); textControl1.setFont(new Font("Dialog", 1, 12)); textControl1.setText(" Send:"); textControl2.setFont(new Font("Dialog", 1, 12)); textControl2.setText("Reciev:" ); choiceControl1.addItemListener(new java.awt.event.ItemListener() { public void itemStateChanged(ItemEvent e) { choiceControl1_itemStateChanged(e); } }); jButton1.setLabel("Connect"); jButton1.setFont(new Font("Dialog", 0, 14)); jButton1.addMouseListener(new java.awt.event.

MouseAdapter() { public void mouseClicked(MouseEvent e) { jButton1_mouseClicked(e); } }); jButton2.setLabel("Disconnect" ); jButton2.setFont(new Font("Dialog", 0, 14)); jButton2.addMouseListener(new java.awt.event.MouseAdapter() { public void mouseClicked(MouseEvent e) { jButton2_mouseClicked(e); } }); jButton3.setLabel("Send"); jButton3.setFont(new Font("Dialog", 0, 16)); jButton3.addMouseListener(new java.awt.event.MouseAdapter() { public void mouseClicked(MouseEvent e) { jButton3_mouseClicked(e); } }); jButton4.setLabel("Reciev"); jButton4.setFont(new Font("Dialog", 0, 16)); jButton4.addMouseListener(new java.awt.event.MouseAdapter() { public void mouseClicked(MouseEvent e) { jButton4_mouseClicked(e); } }); bevelPanel1.setLayout(xYLayout2); this.add(bevelPanel1, BorderLayout.CENTER); bevelPanel1.add(jButton1, new XYConstraints(211, 8, 97, 34)); bevelPanel1.add(jButton2, new XYConstraints(312, 8, 105, 34)); bevelPanel1.add(jButton3, new XYConstraints(285, 124, 96, 41)); bevelPanel1.add(jButton4, new XYConstraints(287, 222, 97, 38)); bevelPanel1.add(jTextArea1, new XYConstraints(5, 113, 234, 70)); bevelPanel1.add(jTextArea2, new XYConstraints(6, 205, 233, 69)); bevelPanel1.add(choiceControl1, new XYConstraints(8, 8, 191, 23)); bevelPanel1.add(textFieldControl1, new XYConstraints(7, 49, 190, -1)); bevelPanel1.add(textControl1, new XYConstraints(5, 90, 75, 22)); bevelPanel1.add(textControl2, new XYConstraints(7, 186, 66, 19)); } void choiceControl1_itemStateChanged(ItemEven t e) {} void jButton1_actionPerformed(ActionEvent e) {} void jButton1_mouseClicked(MouseEvent e) { String adress; {adress = choiceControl1.getSelectedItem(); try { s=new Socket(adress,9999); is=s.getInputStream(); создание вх. и вых. os=s.getOutputStream(); потоков. str=new String(buf,0,length); str="Connect"; buf=str.getBytes(); os.write(buf); описание кнопки ‘Connect” length=is.read(buf); textFieldControl1.setText(str); jButton2.enable(); jButton2.setEnabled(true); jButton1.disable(); jButton1.setEnabled(false); jButton3.enable(true); } catch(Exception ioe) { }.

– Конец работы –

Используемые теги: Описание, соккетов, языке, Java0.069

Если Вам нужно дополнительный материал на эту тему, или Вы не нашли то, что искали, рекомендуем воспользоваться поиском по нашей базе работ: Описание соккетов на языке java

Что будем делать с полученным материалом:

Если этот материал оказался полезным для Вас, Вы можете сохранить его на свою страничку в социальных сетях:

Еще рефераты, курсовые, дипломные работы на эту тему:

Понятие литературный язык. Место литературного языка среди других форм существования языка
Литературный язык это язык государственных и культурных учреждений школьного обучения радио и телевидения науки публицистики художественной... Современный литературный язык многофункционален Он используется в различных... Основные сферы использования литературного языка телевидение и кино наука и образование печать и радио...

Два объекта истории русского языка: живой язык диалектный и литературный язык
Новые общественные функции приобретает русский язык по мере сложения новой исторической общности советского народа он становится межнациональным... Современный период... Горшкова Хабургаев ИГРЯ...

Понятие алгоритма, его свойства. Описание алгоритмов с помощью блок схем на языке Turbo Pascal
Каким же образом компьютер решает сложнейшие задачи обработки информации Для решения этих задач программист должен составить подробное описание… В разных ситуациях в роли исполнителя может выступать электронное или… Составление алгоритмов и вопросы их существования являются предметом серьзных математических исследований. Свойства…

Философия языка "Трактата": логика языка versus логика мышления
Почти год Витгенштейн провел в плену, большую часть времени в лагере в Монте-Касино (Южная Италия). Здесь он и закончил ЛФТ. На протяжении всего… Добавим, что первое издание ЛФТ относится к 1921 году [23] . Для общей оценки… Можно сказать, что именно в этом произведении был выражен лингвистический поворот, у Фреге и Рассела лишь намеченный,…

Понятие о языке и речи. Основные функции языка
Понятие о языке и речи Основные функции языка... Понятие об основных и дополнительных формах существования языка Разнообразие... Литературный язык как высшая форма существования национального языка Основные черты литературного языка...

Средства невербальной коммуникации в изучении иностранного языка (на примере немецкого языка)
Он во многом определяет как реакцию на окружающих, так и их отношение к нам. Стоит только сознательно отнестись к этим безмолвным сигналам, которые… Самые современные представления позволяют думать, что способность читать чужие… Проще говоря, самые разные внешние признаки, такие как выражение лица или направление взгляда, помогают нам догадаться…

Лекция 1. Морфология – центр языкового пространства, и для того, чтобы узнать язык, надо прежде всего понять его морфологию
Введение в морфологию... Морфология центр языкового пространства и для того чтобы узнать язык надо прежде всего понять его...

Грамматика как языковой уровень. Морфология и смежные уровни языка; морфология и фонология; основные понятия морфонологии; морфология и синтаксис
Термин морфология состоит из двух древнегреческих корней и буквально означает учение о форме Он имеет два основных значения... Система механизмов языка обеспечивающая построение и понимание его... раздел грамматики изучающий закономерности функционирования и развития этой системы...

А.Л. Лось Пособие включает разделы: языкознание как наука о языке, сущность и структура языка, лексикология, фонетика, грамматика, письменность и графические
Предисловие... Настоящее пособие написано в соответствии с программой по курсу Введение в... Автор стремился достаточно полно изложить материал курса осветить наиболее существенные проблемы стоящие перед...

Билет 1. Понятие старославянского языка. Судьба старославянской традиции в славянском мире. Значение ССЯ для русского литературного языка
Билет Склонение существительных с древнейшими основами на согласный и на Происхождение чередований в основах И Билет Склонение... Билет Происхождение ССЯ Деятельность Константина Кирилла и Мефодия И... Билет Грамматическая противопоставленность личных и неличных местоимений Склонение личных и возвратного...

0.036
Хотите получать на электронную почту самые свежие новости?
Education Insider Sample
Подпишитесь на Нашу рассылку
Наша политика приватности обеспечивает 100% безопасность и анонимность Ваших E-Mail
Реклама
Соответствующий теме материал
  • Похожее
  • По категориям
  • По работам