![]() |
Модераторы: korob2001, ginnie |
![]() ![]() ![]() |
|
gers |
|
||||||
Новичок Профиль Группа: Участник Сообщений: 26 Регистрация: 30.9.2007 Репутация: нет Всего: нет |
Здравствуйте Уважаемые коллеги!
вот есть код сервер-клиента:
написал второй такойже клиент-сервер на delphi, и проблема в чем: этот сервер должен ответить в клиентскую прогу на delphi только вываливается после того как не может определить адрес для обратного ответа:
при явной подстановке айпи:
все работает. в чем может быть дело? Это сообщение отредактировал(а) gers - 20.1.2008, 03:46 |
||||||
|
|||||||
nitr |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2543 Регистрация: 10.2.2006 Где: Россия :) Репутация: 37 Всего: 84 |
На сколько вижу, вы удалили некоторые строки из своего скрипта. Можете показать код, так чтобы оно соответствовал тому что в вашем "редакторе". Поясню, указана ошибка в строке 19 и 20, из приведенного - не понятно.
Может вы тестируете на одном ПК, и просто порт занят? Если я прав, то немного измените ваш скрипт, а так получается, что скрипт "не может понять клиент или сервер". Могу ошибаться, но похоже на это. Ещё для теста можете вывести ваша переменная $hisaddr, чтобы определить, определяется она или нет. P.S.: поправьте тему, у вас орфогр. ошибка. |
|||
|
||||
gers |
|
||||
Новичок Профиль Группа: Участник Сообщений: 26 Регистрация: 30.9.2007 Репутация: нет Всего: нет |
Простите исправил в исходное состояние, а название темы чтото не понял как менять
![]() стоят они на разных машинах, проблем с портами быть неможет, дело в том что даже вывод переменной $hishost остается пустой, а в ней должен быть по идее адрес удаленного хоста, правильно? нашел еще одну ошибку в 20 строке, это я ее сделал в ходе экспериментов, сейчас исправил:
и ошибка при отправке обратно:
Это сообщение отредактировал(а) gers - 20.1.2008, 04:01 |
||||
|
|||||
nitr |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2543 Регистрация: 10.2.2006 Где: Россия :) Репутация: 37 Всего: 84 |
Я увидел, что у вас не определяется ИП
![]()
Честно, я даже не вижу откуда вы получаете переменую $hishost. P.S.: gers, при редактировании сообщения должна быть доступна графа с названием темы, которую и можно отредактировать. Добавлено через 24 секунды 12-ая строка. Добавлено через 1 минуту и 38 секунд Не обращайте внимания, на 18-ую ![]() |
|||
|
||||
KSURi |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 887 Регистрация: 8.6.2006 Где: Russia Репутация: 20 Всего: 27 |
Зачем во время цикла каждый раз получать данные, которые не изменяются? Манипуляции с sockaddr_in и gethostbyaddr можно заменить вызовом одного метода peerhost. В итоге я сделал бы так:
Ну и собственно по поводу ошибки: как уже написал nitr, вы используете неинициализированную переменную $hishost в качестве адреса для подключения. Однако, не понятно, почему это обнаруживается только при попытке посылки данных, хотя по идее должна была отработать проверка or die "socket: $@"... Это сообщение отредактировал(а) KSURi - 20.1.2008, 04:42 -------------------- Died at Life.pl line 21 |
||||
|
|||||
gers |
|
||||
Новичок Профиль Группа: Участник Сообщений: 26 Регистрация: 30.9.2007 Репутация: нет Всего: нет |
Спасибо за помощь! но проблема основная осталась, $hishost начала определяться, но в PeerAddr =>$hishost она толи не доходит толи я торможу, при явной подстановке PeerAddr => '192.168.2.3' все работает. И подскажите где можно почитать про неинициализированные переменные если это с связано с моей проблемой.
ответ:
|
||||
|
|||||
KSURi |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 887 Регистрация: 8.6.2006 Где: Russia Репутация: 20 Всего: 27 |
gers, уважаемый, вы кажется совсем не поняли, что я и nitr имели ввиду.
Что вы такое пишете? Где она начала определяться? Давайте посмотрим последний код внимательно: Код my $hishost; только объявляет переменную, но не задает ей значение, т.е. грубо говоря, в таблице символов Perl появляется упоминание о $hishost, но сама переменная пуста. Ей надо явно задать значение:
А потом уже подставлять в кач-ве параметра PeerAddr в создании сокета. Добавлено через 3 минуты и 23 секунды Метод изменили, а за цикл не вынесли) Это сообщение отредактировал(а) KSURi - 20.1.2008, 15:01 -------------------- Died at Life.pl line 21 |
||||
|
|||||
gers |
|
|||
Новичок Профиль Группа: Участник Сообщений: 26 Регистрация: 30.9.2007 Репутация: нет Всего: нет |
так дело в том что $hishost = 'удаленный_ip'; меняется в зависимости от адреса запроса, простите что не ясно выразился.
По идее $hishost = $sock->peerhost; должен быть в цикле иначе адрес удаленного хоста не будет менять или я неправ тут? и так и не разобрался как поправить тему ![]() само поле темы неизменяемое... Это сообщение отредактировал(а) gers - 20.1.2008, 15:25 |
|||
|
||||
KSURi |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 887 Регистрация: 8.6.2006 Где: Russia Репутация: 20 Всего: 27 |
Вы что-то совсем непонятное написали =( В зависимости от какого запроса будет меняться адрес? Где вообще в коде какие-то запросы? Это сообщение отредактировал(а) KSURi - 20.1.2008, 18:38 -------------------- Died at Life.pl line 21 |
|||
|
||||
KSURi |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 887 Регистрация: 8.6.2006 Где: Russia Репутация: 20 Всего: 27 |
Так, виноват, извиняюсь.
Про peerhost я погорячился: забыл, что имею дело с UDP. Оставьте как есть (я имею ввиду про вынесение за цикл). Однако, с $hishost все остается в силе: вы используете неинициализрованную переменную в кач-ве адреса для подключения (параметр PeerAddr на строке 11) и не понятно от каких "запросов" она будет зависить. P.S.: почистил предыдущий пост Это сообщение отредактировал(а) KSURi - 20.1.2008, 18:42 -------------------- Died at Life.pl line 21 |
|||
|
||||
gers |
|
|||
Новичок Профиль Группа: Участник Сообщений: 26 Регистрация: 30.9.2007 Репутация: нет Всего: нет |
блин вобщем подразобрался немного, все верно.
$hishost = $sock->peerhost; $hishost переменная (айпи) возникает когда удаленный клиент посылает сообщение и происходит цикл: узнаем адрес удаленного клиента и посылаем ему ответное сообщение а проблема в том что PeerAddr =>$hishost должен выглядеть так PeerAddr =>'$hishost' только непойму как надо в этом случае экранировать переменную внутри ковычек? или переменную желательно заключить в ковычки еще раньше? |
|||
|
||||
nitr |
|
||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2543 Регистрация: 10.2.2006 Где: Россия :) Репутация: 37 Всего: 84 |
Чушь это. Я не знаю чего вы хотите получить, но у вас "слишком простое приложение", чтобы назвать его более менее полноценным сервером-клиетом. udp.pl
client.pl
Но верно ли это всё? |
||||||
|
|||||||
gers |
|
|||
Новичок Профиль Группа: Участник Сообщений: 26 Регистрация: 30.9.2007 Репутация: нет Всего: нет |
Большое спасибо за помощь ребята, я немного не стого начал...
|
|||
|
||||
![]() ![]() ![]() |
Правила форума "Perl" | |
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Perl: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |