powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / сеть
42 сообщений из 42, показаны все 2 страниц
сеть
    #33025607
mastanik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть сервер, есть клиент. Сервер многопоточный, т.е. для каждого соединения создается новый поток. например, клиент и сервер обмениваются сообщениями. все здорово. Вопрос, как сделать, чтобы и клиенты могли друг с другом общаться? Можно просто саму идею подкинуть.

И еще одно. текст кода main сервера:

...
public static void main(String args[]){
ServerSocket ss = new ServerSocket(2300);
for(;;){
Socket client = ss.accept();
ClientThread thread = new ClientThread(client);
thread.start();
}
}
...

Как-то оно так. Так вот, говорят, что за время создания нового экземпляра потока, могут проигнорироваться новые соединения. Это так? Как этого избежать?

Ребята, подскажите пожалуйста.
...
Рейтинг: 0 / 0
сеть
    #33025622
Фотография Timm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mastanikТак вот, говорят, что за время создания нового экземпляра потока, могут проигнорироваться новые соединения
Кто говорит? по-моему это неправда.
mastanikМожно просто саму идею подкинуть
как вариант JMS
...
Рейтинг: 0 / 0
сеть
    #33025628
Фотография adf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я такую фигню на диплом пишу.
Создается список клиентов.
Надо там синхронизовать по-моему этот список.
так :

public void runServer(){
try{
while (true){
Socket us = servSock.accept();
//получить IP адрес машины, а не имя
InetAddress hostIP = us.getInetAddress();

ChatHandler cl = new ChatHandler(us, hostIP);

synchronized(clients){
//сначала стартовать и проверить
//потом добавить в список и разослать всем
clients.add(cl);
cl.start();

}
}
}catch(IOException e){
log("Ошибка при работе сервера: "+ e+"\n");
System.exit(0);
}
}

Где


///////////////////////////////////////////////////////////
/////////// ВНУТРЕННИЙ КЛАСС юзера чата //////////
/////////////////////////////////////////////////////////
protected class ChatHandler extends Thread {

protected Socket clientSock;
protected BufferedReader is;
protected ObjectOutputStream pw;
protected InetAddress ip;//уникальный ip адрес машины

//это достается из дерева
protected int num;//идентификатор
protected String name;//фио


public ChatHandler(Socket sock, InetAddress clnt) throws IOException {

clientSock=sock;
ip=clnt;
is=new BufferedReader(new InputStreamReader(sock.getInputStream()));
pw=new ObjectOutputStream(sock.getOutputStream());

////////////////////////////////////////////////////////////////
/////////// RUN для нитей ////////////////////////
public void run(){
String line;
try {
//получаем сообщение
while ((line=is.readLine())!=null){
//здесь рассылается всем,
//но у меня тут слегка наворочено,
char c = line.charAt(0);//вид сообщения
}
}
}catch(IOException e){
log("Ошибка в нитях "+ e +"\n" );
}finally{//делается в любом случае
log(name + " Отключился\n");
close();
synchronized(clients){
clients.remove(this);
if (clients.size()==0){
log("Никого нет\n");
}
}
}
}

Очень просто отправлять сообщения всем клиентам сразу. Сервер получает их потока сообщение от кого-либо, потом посылает в поток всем
...
Рейтинг: 0 / 0
сеть
    #33025639
mastanik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
окей, а если не прибегать к применению корпоративных технологий? если нужно общаться только 10 людям? и приложению не требуется быть масштабируемым?
...
Рейтинг: 0 / 0
сеть
    #33025651
А.Грасоff™ JE
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а можно код оформлять тэгами [ SRC java]...[/ SRC]?

--
а?

типа так:

Код: plaintext
1.
2.
3.
 for  ( int  i =  0 ; i <  5 ; i++) {
  System.out.println("Зае#$:ло");
}
...
Рейтинг: 0 / 0
сеть
    #33025652
mastanik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 adf:
спасибо за пример, но тут как я понял рассылка сразу всем клиентам?
...
Рейтинг: 0 / 0
сеть
    #33025657
Фотография Timm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mastanikокей, а если не прибегать к применению корпоративных технологий? если нужно общаться только 10 людям? и приложению не требуется быть масштабируемым?
Че так? :)
А если эти 10 челов потом в Сан или Мыкрософт превратятся?
...
Рейтинг: 0 / 0
сеть
    #33025670
Фотография adf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mastanik2 adf:
спасибо за пример, но тут как я понял рассылка сразу всем клиентам?
Ну этот пример-да. Я тут комнатки сейчас делаю

к звездочкам прибавляются и отсутствие [src]? Сорри, учту
...
Рейтинг: 0 / 0
сеть
    #33025672
А.Грасоff™ JE
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
правила форума:

http://www.sql.ru/forum/rules.aspx
...
Рекомендуется:
...
Для повышения удобочитаемости сообщений - пользоваться ... тегом форматирования исходных кодов src.
...
...
Рейтинг: 0 / 0
сеть
    #33025674
mastanik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
и какого вырезают мои сообщения???

Народ, по второму вопросу кто-нить прокомментирует?
...
Рейтинг: 0 / 0
сеть
    #33025692
wessen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2mastanik
Я когда с сокетами ознакомился, написал гуёвый чат на swing, там все как adf расписло, если надо, могу дать.
...
Рейтинг: 0 / 0
сеть
    #33025707
AL_KIR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вы пишете:
mastanikЕсть сервер, есть клиент. Сервер многопоточный, т.е. для каждого соединения создается новый поток. например, клиент и сервер обмениваются сообщениями. все здорово. Вопрос, как сделать, чтобы и клиенты могли друг с другом общаться? Можно просто саму идею подкинуть.


Представляется что в вашем случае клиент и сервер - это отдельные приложения. Все клиенты общаются только с сервером. В таком случае можно пойти по технологии чатов в интернете :). Еще аналог Почтовый клиент и Почтовый Сервер.

Другая технология состоит в том что приложение которое вы напишите будет являться и клиентом и сервером одновременно (т.е будет прослушивать некий порт и общаться с таким же приложением). Я видел несколько таких чатов для локальной сети. Запускается приложение, далее выбираете компьюторы с которыми вы хотите общаться и общаетесь, при условии если на этих комьюторах тоже будет запущена такая программа. Минус конечно очевиден - вы общаетесь с компьютером (ip в сетях tcp/ip), а не с человеком, который может работать за разными компьютерами.
...
Рейтинг: 0 / 0
сеть
    #33025718
Фотография adf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wessen2mastanik
Я когда с сокетами ознакомился, написал гуёвый чат на swing
У тебя рассылка всем была?
...
Рейтинг: 0 / 0
сеть
    #33025738
wessen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
adf wessen2mastanik
Я когда с сокетами ознакомился, написал гуёвый чат на swing
У тебя рассылка всем была?
да.
Ну там стондартно, сервер и много клиентов.
...
Рейтинг: 0 / 0
сеть
    #33025754
wessen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wessen adf wessen2mastanik
Я когда с сокетами ознакомился, написал гуёвый чат на swing
У тебя рассылка всем была?
да.
Ну там стондартно, сервер и много клиентов.

А хотя нет, парю я, не так вопрос понял, там у каждого клиента есть список всех остальных, выбираешь мышкой нужного и говоришь с ним.
...
Рейтинг: 0 / 0
сеть
    #33025758
А.Грасоff™ JE
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wessen wessen adf wessen2mastanik
Я когда с сокетами ознакомился, написал гуёвый чат на swing
У тебя рассылка всем была?
да.
Ну там стондартно, сервер и много клиентов.

А хотя нет, парю я, не так вопрос понял, там у каждого клиента есть список всех остальных, выбираешь мышкой нужного и говоришь с ним.
дак вот кто мирабилис основал!
...
Рейтинг: 0 / 0
сеть
    #33025774
Фотография adf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wessen wessen adf wessen2mastanik
Я когда с сокетами ознакомился, написал гуёвый чат на swing
У тебя рассылка всем была?
да.
Ну там стондартно, сервер и много клиентов.

А хотя нет, парю я, не так вопрос понял, там у каждого клиента есть список всех остальных, выбираешь мышкой нужного и говоришь с ним.

..
Просто у меня задача рассылки по комнатам, приходится че-то придумывать, а это 100% неоптимально. Я вот думала, может кто-то с этим сталкивался...
У меня дерево отделов
...
Рейтинг: 0 / 0
сеть
    #33025781
Фотография Pitbull terrier
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В чем проблема?
добавить для клиента новый тип команд, которые будут пересылаться всем (определенным) подключенным клиентам. На сервере храните список открытых сокетов (если этого еще нет) и расталкиваете по ним сообщения.
...
Рейтинг: 0 / 0
сеть
    #33025800
Фотография adf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Pitbull terrierВ чем проблема?
добавить для клиента новый тип команд, которые будут пересылаться всем (определенным) подключенным клиентам. На сервере храните список открытых сокетов (если этого еще нет) и расталкиваете по ним сообщения.
Я думала сделать список комнат, в которых будут хранится списки группы пользователей. На сервер приходит номер комнаты и сообщение которое надо разослать по комнате.
Тут проблема с иерархией сотрудников. Кто кому имеет право отсылать сообщения (как сказал шеф:"Дворник дядя ваня не имеет право посылать запрос на открытие комнаты с директором тетей Зоей. А вот тетя Зоя имеет право"). Причем дерево может быть несбалансированным и уровней нефиксированное количество
...
Рейтинг: 0 / 0
сеть
    #33025801
jms все проблемы решит
...
Рейтинг: 0 / 0
сеть
    #33025815
wessen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
херась тут думатьjms все проблемы решит
чтобы был jms нужен сервер приложение, а это уже совсем другая история....
...
Рейтинг: 0 / 0
сеть
    #33025820
Фотография adf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
херась тут думатьjms все проблемы решит

Да?
Этож диплом!
И его надо еще дописать за 7 дней
...
Рейтинг: 0 / 0
сеть
    #33025827
А.Грасоff™ JE
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
adfЭтож диплом!
И его надо еще дописать за 7 дней:) ты справишься :)
...
Рейтинг: 0 / 0
сеть
    #33025848
Фотография adf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А.Грасоff™ JE adfЭтож диплом!
И его надо еще дописать за 7 дней:) ты справишься :)
:)Ладно бы этот долбанный чат, там еще и базка данных недописанная...

Я чувствую каким-то местом, что я лишусь стабильного 8-часового крепкого сна и прочих радостей жизни.
...
Рейтинг: 0 / 0
сеть
    #33025855
неа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
wessen херась тут думатьjms все проблемы решит
чтобы был jms нужен сервер приложение, а это уже совсем другая история....
ни нужен
...
Рейтинг: 0 / 0
сеть
    #33025861
black zorro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
как вариант воспользоваться широковещательной рассылкой.
вместо того чтобы хранить список клиентов и в цикле всем им слать сообщение, к тому же так быстрее будет рабоать, хотя какая, к слову скорость для диплома?
...
Рейтинг: 0 / 0
сеть
    #33025874
Фотография adf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
black zorroкак вариант воспользоваться широковещательной рассылкой.
вместо того чтобы хранить список клиентов и в цикле всем им слать сообщение, к тому же так быстрее будет рабоать, хотя какая, к слову скорость для диплома?
:)) Главное чтобы хоть как-нибудь работал, а пока вообще не работает.
Тут же еще типа вопросы "безопасности" есть. У меня в клиенте предполагается проверка запроса, а потом на сервере. Смешно самой.
Зато по правилам
...
Рейтинг: 0 / 0
сеть
    #33025908
wessen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
неа wessen херась тут думатьjms все проблемы решит
чтобы был jms нужен сервер приложение, а это уже совсем другая история....
ни нужен
Просвети не знающих.
...
Рейтинг: 0 / 0
сеть
    #33025944
?
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
?
Гость
wessen неа wessen херась тут думатьjms все проблемы решит
чтобы был jms нужен сервер приложение, а это уже совсем другая история....
ни нужен
Просвети не знающих.
тынц
...
Рейтинг: 0 / 0
сеть
    #33026477
mastanik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ребзя! давайте вернемся к истоку...
во-первых, так никто и не ответил на второй МОЙ вопрос.
во-вторых, Я диплом еще не пишу, пока только бакалаврскую (и то не по теме),и мне хотелось бы узнать КАК один клиент может послать сообщение другому через сервер, если сокеты создается в бесконечном цикле прослушивания? Или надо создать массив сокетов и потом по индексу каким-то раком рассылать... Широковещательная рассылка не особо требуется.
Спасибо
...
Рейтинг: 0 / 0
сеть
    #33026485
mastanik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2wessen

wessenЯ когда с сокетами ознакомился, написал гуёвый чат на swing, там все как adf расписло, если надо, могу дать

спасибо, но не надо. хочется все-таки самому написать, но с маленькой помощью.

Так что там со вторым вопросом?
...
Рейтинг: 0 / 0
сеть
    #33026492
Фотография adf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mastanik2wessen

wessenЯ когда с сокетами ознакомился, написал гуёвый чат на swing, там все как adf расписло, если надо, могу дать

спасибо, но не надо. хочется все-таки самому написать, но с маленькой помощью.

Так что там со вторым вопросом?

Проще чем пример, который я тебе привела (это почти весь сервер), не получится наверно. Это и не корпоративная штука ( или как ты там назвал) и предназначена как раз для малого числа пользователей. И че за "второй вопрос"?
...
Рейтинг: 0 / 0
сеть
    #33026539
mastanik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
adfПроще чем пример, который я тебе привела (это почти весь сервер), не получится наверно.

я и не пытаюсь написать как проще, хочется главное самому.

adfИ че за "второй вопрос"?

повторяю: препод сказал, что во время создавания нового экземпляра потока и его запуска
Код: plaintext
1.
2.
Socket client = ss.accept;
ClientTread thread =  new  ClientThread(client);
thread.start();

могут поступить несколько запросов на соединение, которые будут игнорированы. в чем вопрос: это так? если так, то как избежать?

корпоративная штука...гы8)
...
Рейтинг: 0 / 0
сеть
    #33026551
грасоф
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mastanikпрепод сказал, что во время создавания нового экземпляра потока и его запуска
Код: plaintext
1.
2.
Socket client = ss.accept;
ClientTread thread =  new  ClientThread(client);
thread.start();

могут поступить несколько запросов на соединение, которые будут игнорированы. в чем вопрос: это так? если так, то как избежать?
а сколько лет преподу?
...
Рейтинг: 0 / 0
сеть
    #33026726
Фотография adf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mastanik
повторяю: препод сказал, что во время создавания нового экземпляра потока и его запуска
Код: plaintext
1.
2.
Socket client = ss.accept;
ClientTread thread =  new  ClientThread(client);
thread.start();

могут поступить несколько запросов на соединение, которые будут игнорированы. в чем вопрос: это так? если так, то как избежать?


Я ж тебе уже сразу на него по-моему ответила (это про синхронизацию)

Можешь его успокоить такими словами:
"Из документации по классу ServerSocet следует, что метод accept() не синхонизирован, то есть этот метод может быть вызван любым количестом нитей. Это действительно может приводить к нежелательным последствиям, поэтому при вызове рекомендуется использовать синхронизацию, что мы и делаем! Тем самым гарантируется, что только один клиент запустит этот метод в данный момент времени. Т. о. будет только одна нить, запущенная в методе accept() и n-1 ожидающих соединения" /Для пущей убедительности потрясать какой-нибудь толстой книжкой по Яве и аппелировать к Яну Ф. Дарвину, текст из книги "Java. Сборник рецептов" которого я тебе недословно привела/
...
Рейтинг: 0 / 0
сеть
    #33027097
Фотография Pitbull terrier
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
? wessen неа wessen херась тут думатьjms все проблемы решит
чтобы был jms нужен сервер приложение, а это уже совсем другая история....
ни нужен
Просвети не знающих.
тынц


Эта штука стремится ставить себя как виндовский сервис.
Если это не сервер, то зачем эти телодвижения???
Баян!!!
...
Рейтинг: 0 / 0
сеть
    #33027151
wessen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Препод не прав, тут дело даже не в Java. Когда создается серверный сокет, создается буфер в который помещаются все запросы но соединения, это делает сама ОС. Когда создается класс ServerSocket, то вероятно(точно не знаю, но по другому то и не как вроде) создается специальный поток, который этот самый буфер сканирует и как только туда попадает запрос, то метод accept создает Socket и возвращает его. Кстати, про метод accpet написано:
...The method blocks until a connection is made.
Следовательно синхронизировать его не надо.
Когда мы находимся в методе accept или уже вышли из него и создаем клиентский поток и чего нибудь еще там делается, то конечно же может поступить еще пара сотен запросов на соединение, так вот, они не куда не пропадут, они попадут в буфер и следующий вызов метода accept создаст сокет, запрос на который пришол последним, но уже после того, как мы были внутри accept :) Вот так бы я препода грузонул. Все ИМХО кстати.
...
Рейтинг: 0 / 0
сеть
    #33027394
mastanik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем спасибо, особенно wessen и adf.
грасофа сколько лет преподу?
Скока лет точно не знаю, но этот перец, в дополнение к преподавательству, работает техдиром кой-какой компании, тесно связанной с Sun Microsystems.

2wessen
автор...The method blocks until a connection is made.
а где ты это прочел?

Может я чего упустил, но КАК ПЕРЕДАТЬ СООБЩЕНИЕ ОТ ОДНОГО ПОТОКА ДРУГОМУ?

спасибо
...
Рейтинг: 0 / 0
сеть
    #33027403
wessen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а где ты это прочел?
Эта страница должна быть стартовой в твоем браузере :)
...
Рейтинг: 0 / 0
сеть
    #33027478
Фотография Pitbull terrier
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mastanik
Может я чего упустил, но КАК ПЕРЕДАТЬ СООБЩЕНИЕ ОТ ОДНОГО ПОТОКА ДРУГОМУ?
спасибо

можно так: для каждого потока создаешь очередь сообщений (FIFO стек), которую он будет "слушать" (периодически пытаться выбирать элементы) и, если есть новые сообщения, обрабатывать их. Ссылки на очереди регистрируешь в каком-нть общедоступном вспомогательном классе, завязываешь их на идентификаторы твоих потоков. Когда надо передать сообщение потоку - выбираешь его очередь и передаешь ей сообщение.
...
Рейтинг: 0 / 0
сеть
    #33027693
mastanik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторЭта страница должна быть стартовой в твоем браузере :)
Да, у меня есть апи спецификация скаченная, просто подумал может еще какой хороший источник есть.

2Pitbull terrier
я что-то такое и задумывал...но обмозговать все нормально не могу
...
Рейтинг: 0 / 0
сеть
    #33031064
mastanik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Может кто-нибудь еще что посоветует?
...
Рейтинг: 0 / 0
42 сообщений из 42, показаны все 2 страниц
Форумы / Java [игнор отключен] [закрыт для гостей] / сеть
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]