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

Ваш аккаунт

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

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

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

Socket

360
15 августа 2007 года
P*t*
474 / / 15.02.2007
Я пишу сетевую игру.

Там программа-сервер создаёт ServerSocket и вызывает для него метод accept().

Программа клиент должна к нему подключиться по указанному IP адресу.

Почему-то единственное место где это работает - локальная сеть у меня дома.
При подключении через интернет клиент не находит сервер.

Что можно сделать?
63
20 августа 2007 года
Zorkus
2.6K / / 04.11.2006
Соединение того клиента и сервера какое? Работе может препятствовать шлюз локальной сети, жестко настроенный фаервол, NAT.
Описание ошибки полное выложи ты.
552
20 августа 2007 года
Ivanhoe
373 / / 30.04.2006
Сервер пингуется? IP у него реальный?
360
21 августа 2007 года
P*t*
474 / / 15.02.2007
Цитата: Ivanhoe
Сервер пингуется? IP у него реальный?



Непонял.
Что значит пингуется?
Чем реальный IP отличается от НЕреального?

[QUOTE=Zorkus]Описание ошибки полное выложи ты.[/QUOTE]
Он сообщает, что на заданном IP и порте никакого ServerSocket-а нету.
(IOException)

240
21 августа 2007 года
aks
2.5K / / 14.07.2006
Цитата: P*t*

Что значит пингуется?


ICMP пакеты до него доходят? ЧТо утилита ping говорит?

Цитата: P*t*

Чем реальный IP отличается от НЕреального?


тем что реальный - тот который доступен в интернете. А есть диапозоны IP-адрессов как раз специально предназначенных для локальных сетей, и конечно они не доступны в интернете.

Цитата: P*t*

Он сообщает, что на заданном IP и порте никакого ServerSocket-а нету.
(IOException)



Покажи какой IP ну и порт.

552
21 августа 2007 года
Ivanhoe
373 / / 30.04.2006
С какого-нить компа в инете делаете:
ping <ip-адрес-вашего-сервера>
В консоли.
15K
22 августа 2007 года
gruz0
71 / / 23.11.2006
Интересно писать сетевые приложения, не зная сетевых технологий, не правда ли? :)
360
22 августа 2007 года
P*t*
474 / / 15.02.2007
Цитата: aks
ICMP пакеты до него доходят? ЧТо утилита ping говорит?


Говорит, что отправлено и принято 4 пакета по 32 байта.


Цитата: aks
Покажи какой IP ну и порт.


IP 62.148.156.189
порт 80

[QUOTE=P*t*]Он сообщает, что на заданном IP и порте никакого ServerSocket-а нету.
(IOException)[/QUOTE]
Иногда ещё просто виснет и не подаёт признаков жизни.


[QUOTE=gruz0]Интересно писать сетевые приложения, не зная сетевых технологий, не правда ли? [/QUOTE]
Да, мне уже приходила мысль что надо было что-нибудь почитать на эту тему...
Впрочем ещё не поздно.

552
22 августа 2007 года
Ivanhoe
373 / / 30.04.2006
Пинговали откуда?
360
23 августа 2007 года
P*t*
474 / / 15.02.2007
Цитата: Ivanhoe
Пинговали откуда?



С того же компа, где сервер.

552
23 августа 2007 года
Ivanhoe
373 / / 30.04.2006
Нууу, это ж не в счет ))

Надо с другого компа, который должен будет подключаться к серверу по инету. И главное, чтобы между ними не было другого пути.
63
23 августа 2007 года
Zorkus
2.6K / / 04.11.2006
Ну а даже выше мелочи такой, как непингование сервера, поднимемся. Что за игра и какие технологии используются?
360
24 августа 2007 года
P*t*
474 / / 15.02.2007
Цитата: Zorkus
Ну а даже выше мелочи такой, как непингование сервера, поднимемся. Что за игра и какие технологии используются?



Это 2D игра. Ездишь на танке и стреляешь в противников.

Сервер 30 раз в секунду передаёт клиенту координаты противников.

Клиент при каждом нажатии или отпусканием пользователем кнопки на клавиатуре посылает один байт серверу.

Впрочем это не важно - клиенту не удаётся даже создать сокет.

Часть кода сервера:

 
Код:
ServerSocket s = new ServerSocket(defaultPort);
while (true) {
  Socket socket = s.accept();
  DataInputStream in = new DataInputStream(new BufferedInputStream(socket.getInputStream()));
  DataOutputStream out = new DataOutputStream(new BufferedOutputStream(socket.getOutputStream()));
  newClientConnected(in, out);
}


Часть кода клиента:
 
Код:
private void tryConnect(InetAddres addr, int port) {
     Socket socket = new Socket(addr, port);
     DataInputStream in = new DataInputStream(new BufferedInputStream(socket.getInputStream()));
     DataOutputStream out = new DataOutputStream(new BufferedOutputStream(socket.getOutputStream()));
     serverFind(in, out);
  }
240
24 августа 2007 года
aks
2.5K / / 14.07.2006
А где собственно connect? Или он в serverFind() реализован? как то неправильно тогда названно )
240
24 августа 2007 года
aks
2.5K / / 14.07.2006
Или че вобще serverFind(in, out) делает?
360
24 августа 2007 года
P*t*
474 / / 15.02.2007
Цитата: aks
А где собственно connect?



По идее коннектится в конструкторе сокета:

На сервере запускается serverSocket.accept();
Клиент создаёт сокет;
Сокет в конструкторе коннектится к серверу;
serverSocket.accept() возвращает сокет для связи с клиентом;

Проблема в том, что сокет не создаётся - поток виснет.

В serverFind(in, out) создаются потоки читающие из in и записывающие данные в out.

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог