Вам захотелось сделать свой чат?
Вы уже поняли, что Вам придется изучить принцип сокетов? Ну тогда смею
предложить Вам несколько простых шагов по созданию соединения между компьютерами
в Интернете по средствам Java. Для начала не забудьте добавить в исходный код
вашей программы java.net и java.io пакеты.
Вот три основных этапа создания нашего приложения:
- Сервер (Tim) - Создаём новый сокет, ожидающий запросы от клиента на 4444
порту.
- Клиент (Chris) - Создаём новый сокет, который будет конектиться к Tim на 4444
порт.
- Начинаем передачу данных между клиентом и сокетом.
Инициализация клиентского сокета выглядит следующим образом:
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);
//get the socket's ouput
out=new PrintWriter(clientSocket.getOutputStream(), true);
//get the socket's input
in=new BufferedReader(new inputStreamReader(clientSocket.getInputStream()));
Наверное я переусердствовал с цветами :) Теперь 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();
Я уверен, что найдётся много людей, которые не поймут эту статью. Но если вы
прочитали и не поняли как сделать простой чат, то вероятно вам потребуется ещё
раз прочитать руководство для начинающих :).