Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Сокеты и Java

www.исходники.ru

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

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

Оставить комментарий

Комментарий:
можно использовать BB-коды
Максимальная длина комментария - 4000 символов.
 

Комментарии

1.
97K
02 мая 2016 года
Іван Городинський
0 / / 02.05.2016
+0 / -1
Мне нравитсяМне не нравится
2 мая 2016, 23:47:42
Вопрос... для задания нужно отправить пакет на сервер (например, www.google.com), и получить ответ. Как можно реализовать?
2.
97K
17 января 2016 года
Artem Vasiliev
0 / / 17.01.2016
+4 / -1
Мне нравитсяМне не нравится
17 января 2016, 00:18:27
Полный плагиат http://www.javaportal.ru/java/articles/ClientServer.html
3.
95K
19 мая 2015 года
Александр Гуляев
0 / / 19.05.2015
+2 / -1
Мне нравитсяМне не нравится
19 мая 2015, 11:53:42
Спасибо за статью.
Исправьте ошибки в двух местах(сервер и клиент):

in=new BufferedReader(new inputStreamReader(clientSocket.getInputStream()));
на
in=new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
4.
94K
06 ноября 2014 года
Василий Иванов
0 / / 06.11.2014
+2 / -1
Мне нравитсяМне не нравится
6 ноября 2014, 01:18:33
Очень гут)
5.
93K
04 апреля 2014 года
Сергей Иванович
0 / / 04.04.2014
+3 / -2
Мне нравитсяМне не нравится
4 апреля 2014, 21:01:02
согласен с одним из мнений, что без тредов - статья отстой. как же мультипоточность? :)
бросайте эклипс - IntelliJIDEA от JetBrains - самое оно. И это не реклама, это констатация факта.
(плагин кодинга для Ведроида присутствует)
6.
91K
26 июля 2013 года
Вадим Залюбовский
0 / / 26.07.2013
+13 / -0
Мне нравитсяМне не нравится
26 июля 2013, 08:54:11
+1 тебе человечешка. Когда я захвачу мир я обязательно вспомню о тебе!
7.
89K
25 февраля 2013 года
Mikhail Beryozkin
0 / / 25.02.2013
+3 / -2
Мне нравитсяМне не нравится
25 февраля 2013, 20:34:53
Код:
Socket serverSocket = null;

serverSocket = new Socket(4444); //Notice no user to connect to this time.

serverSocket.accept(); //Accept a client.

тут так не будет работать
Код:
Socket clientSocket = null;

Socket serverSocket = null;

ServerSocket ss = new ServerSocket( 4444);

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

serverSocket = new Socket("TIM",4444);

serverSocket = ss.accept();

вот правильный вариант, все остальное расставит Eclipse(если такой имеется)
8.
48K
31 марта 2009 года
snet
1 / / 31.03.2009
+6 / -8
Мне нравитсяМне не нравится
13 июня 2010, 13:23:00
Не плохая статья. Даже, если об этом же и пишется в учебниках, то она всеравно не лишняя в интернете, я искал именно такую. Конечно из-за ошибок, могла бы быть и лучше.
9.
51K
27 июня 2009 года
guineapig
0 / / 27.06.2009
+8 / -7
Мне нравитсяМне не нравится
27 июня 2009, 11:59:32
Меня,поражает, все лишь на критику способны. Если статья дурацкая, что же вы не напишите "СВОЮ" не дурацкую?! Сначала напишите свою статью о Сокетах и написании простого чата, а потом критикуйте.
Либо критикуйте автора по тихому, что вы перед людьми принижаете достоинство человека.
Я специально здесь зарегился, чтобы оставить своё мнение о комментариях таких людей как "nerses" или "konan".
Не нравится статья? - свяжитесь с автором по тихому, любезно его попросите исправить статью. Или пишите нафиг свои статьи. Зачем хамить?!!
Извините за многословие и флуд.
С уважением Морской Свин.
10.
27K
06 марта 2007 года
shana
0 / / 06.03.2007
+6 / -2
Мне нравитсяМне не нравится
12 марта 2007, 12:05:27
похоже, ни одна добрая душа, не удостоила меня своим вниманием:-( ну,...и лушче этой статьи ничего не предложила...
11.
27K
06 марта 2007 года
shana
0 / / 06.03.2007
+2 / -2
Мне нравитсяМне не нравится
6 марта 2007, 14:01:31
комментировать, по ходу,мы все умеем, а вот дать что-то лучшее или хотя бы адресок скинуть, где бы это лучшее найти никто не сообразил? Я вот, например, уже не мало времени провела в мучительном поиске помощи напиания своего чата и ничего!!!Как насчет, помочь, начинаущ...
12.
Аноним
+4 / -3
Мне нравитсяМне не нравится
30 марта 2006, 22:13:04
ДА блин. что это за статья?
В любой книге такое фуфло написано!
ХОть бы что толковое!

Никто не описывает о том, что сообщения могут быть разные, про потоки. про обраобтку и прием сообщений.

Ведь такие примеры - ерунда, когда начинаешь писать что-то стоящее.
13.
Аноним
+7 / -9
Мне нравитсяМне не нравится
20 марта 2006, 11:32:35
По-моему, нормальная статья. Да, ошибки; да, про треды - ни слова. Но, в принципе, польза есть... Не, блин, все-таки можно было и лучше написать.
14.
Аноним
+3 / -5
Мне нравитсяМне не нравится
9 декабря 2005, 03:33:31
всё это хорошо, пока не взумаешь по вот такой теории программить более сложное клиент-серверное приложение - сразу же обнаруживается огромное количество граблей. Надо было в статье сказать и о потоках и о сериализации
15.
Аноним
+3 / -7
Мне нравитсяМне не нравится
8 декабря 2005, 19:02:50
5 строк и столько же ошибок - идиотизм

ServerSocket serverSocket = null;
serverSocket = new ServerSocket(4444);
16.
Аноним
+3 / -8
Мне нравитсяМне не нравится
6 июня 2005, 22:44:33
durackaya stastya. Sdes ne napisano nichego o thread -ah, a oni vozduh lyubogo chata. Voobshem uchitsya nado rebyata, a ne erundoy stradat'
17.
Аноним
+6 / -2
Мне нравитсяМне не нравится
15 апреля 2005, 18:39:38
Нормальная статья
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог