Вам захотелось сделать свой чат ? Вы уже поняли,
что Вам прийдётся изучить принцып сокетов? Ну тогда смею предложить
Вам несколько простых шагов по созданию соединения между
компьютерами в интернете по средствам 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();
Я
уверен, что найдётся много людей, которые не поймут эту
статью. Но если вы прочитали и не поняли как сделать простой
чат, то вероятно вам потребуется ещё раз прочитать руководство для
начинающих :). |