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