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