15 мая 2023 года "Исходники.РУ" отмечают своё 23-летие!
Поздравляем всех причастных и неравнодушных с этим событием!
И огромное спасибо всем, кто был и остаётся с нами все эти годы!

Главная Форум Журнал Wiki DRKB Discuz!ML Помощь проекту


Вам захотелось сделать свой чат ? Вы уже поняли, что Вам прийдётся изучить принцып сокетов? Ну тогда смею предложить Вам несколько простых шагов по созданию соединения между компьютерами в интернете по средствам Java. Для начала не забудьте добавить в исходный код вашей программы java.net и java.io пакеты.

Вот три основных этапа создания нашего приложения:

 1) Сервер (Tim) - Создаём новый сокет, ожидающий запросы от клиента на 4444 порту.
 2) Клиент (
Chris) – Создаём новый сокет, который будет коннектиться к Tim на 4444 порт.
 3) Начинаем передачу данных между клиентом и сокетом.

Инициализация клиентского сокета выглядит следующим образом:

   Socket clientSocket = null;
   clientSocket = new Socket("Tim", 4444);

 Этот сокет коннектится к компьютеру, названному нами Tim на 4444 порт. Обычно вместо названия Tim используют IP адресс этого компьютера. Но перед тем как мы попытаемся установить связь с серверо, необходимо, чтобы сервер ожидал наш запрос на установление связи, для это создади у сервера соке, и переведём его в режим ожидания входящих запросов:

   Socket serverSocket = null;
   serverSocket = new Socket(4444); //Notice no user to connect to this time.
   serverSocket.accept(); //Accept a client.

Теперь приступим к передаче данных между Клиентом и Сервером.

Задача серверного сокета заключается в том, чтобы за один сеанс связи принять данные от клиента и сразу же передать клиенту ответ. Чтобы произвести такую операцию необходимо объявить потоки PrintWriter для вывода и поток BufferedReader для ввода. Причём объявить потоки необходимо как на сервере, так и на клиенте. Дла простототы я покажу как это делается на клиете:

   PrintWriter out = null;
   BufferedReader in = null;
   Socket clientSocket = null;


   clientSocket = new Socket("Tim", 4444);
   out = new PrintWriter(clientSocket.getOutputStream(), true); //get the socket’s ouput
   in = new BufferedReader( new inputStreamReader( clientSocket.getInputStream() ) ); //get the socket’s input

Наверное я переусердствовал с цветами :) Теперь PrintWriter out будет выходным потоком, при записи в который, данные будут направляться в сокет. Если теперь выполнить out.println(“Hello”), то строка hello будет отправлена серверу. Ну и в конце осталось посмотреть как сделать, чтобы приём информации на сервере шёл непрерывно:

   PrintWriter out = null;
   BufferedReader in = null;
   Socket clientSocket = null;
   String fromServer;


   clientSocket = new Socket("Tim", 4444);
   out = new PrintWriter(clientSocket.getOutputStream(), true);
   in = new BufferedReader(new inputStreamReader( clientSocket.getInputStream() ) );

   while ((fromServer = in.readLine()) != null) { //Цикл до тех пор, пока есть поступающие сообщения

            System.out.println("Server: " + fromServer); //Отображаем полученное сообщение

   }

   out.close();
   
in.close();
   
clientSocket.close();
 

Я уверен, что найдётся много людей, которые не поймут эту статью.  Но если вы прочитали и не поняли как сделать простой чат, то вероятно вам потребуется ещё раз прочитать руководство для начинающих :).