| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Perl: Общие вопросы > помгите найти проблему в udp IO:Socket |
| Автор: gers 20.1.2008, 03:03 | ||||||
| Здравствуйте Уважаемые коллеги! вот есть код сервер-клиента:
написал второй такойже клиент-сервер на delphi, и проблема в чем: этот сервер должен ответить в клиентскую прогу на delphi только вываливается после того как не может определить адрес для обратного ответа:
при явной подстановке айпи:
все работает. в чем может быть дело? |
| Автор: nitr 20.1.2008, 03:17 |
| На сколько вижу, вы удалили некоторые строки из своего скрипта. Можете показать код, так чтобы оно соответствовал тому что в вашем "редакторе". Поясню, указана ошибка в строке 19 и 20, из приведенного - не понятно. Может вы тестируете на одном ПК, и просто порт занят? Если я прав, то немного измените ваш скрипт, а так получается, что скрипт "не может понять клиент или сервер". Могу ошибаться, но похоже на это. Ещё для теста можете вывести ваша переменная $hisaddr, чтобы определить, определяется она или нет. P.S.: поправьте тему, у вас орфогр. ошибка. |
| Автор: gers 20.1.2008, 03:52 | ||||
| Простите исправил в исходное состояние, а название темы чтото не понял как менять стоят они на разных машинах, проблем с портами быть неможет, дело в том что даже вывод переменной $hishost остается пустой, а в ней должен быть по идее адрес удаленного хоста, правильно? нашел еще одну ошибку в 20 строке, это я ее сделал в ходе экспериментов, сейчас исправил:
и ошибка при отправке обратно:
|
| Автор: nitr 20.1.2008, 04:04 | ||
Я увидел, что у вас не определяется ИП
Честно, я даже не вижу откуда вы получаете переменую $hishost. P.S.: gers, при редактировании сообщения должна быть доступна графа с названием темы, которую и можно отредактировать. Добавлено через 24 секунды 12-ая строка. Добавлено через 1 минуту и 38 секунд Не обращайте внимания, на 18-ую |
| Автор: KSURi 20.1.2008, 04:41 | ||||
Зачем во время цикла каждый раз получать данные, которые не изменяются? Манипуляции с sockaddr_in и gethostbyaddr можно заменить вызовом одного метода peerhost. В итоге я сделал бы так:
Ну и собственно по поводу ошибки: как уже написал nitr, вы используете неинициализированную переменную $hishost в качестве адреса для подключения. Однако, не понятно, почему это обнаруживается только при попытке посылки данных, хотя по идее должна была отработать проверка or die "socket: $@"... |
| Автор: gers 20.1.2008, 14:25 | ||||
Спасибо за помощь! но проблема основная осталась, $hishost начала определяться, но в PeerAddr =>$hishost она толи не доходит толи я торможу, при явной подстановке PeerAddr => '192.168.2.3' все работает. И подскажите где можно почитать про неинициализированные переменные если это с связано с моей проблемой.
ответ:
|
| Автор: gers 20.1.2008, 15:24 |
| так дело в том что $hishost = 'удаленный_ip'; меняется в зависимости от адреса запроса, простите что не ясно выразился. По идее $hishost = $sock->peerhost; должен быть в цикле иначе адрес удаленного хоста не будет менять или я неправ тут? и так и не разобрался как поправить тему само поле темы неизменяемое... |
| Автор: KSURi 20.1.2008, 18:14 | ||
Вы что-то совсем непонятное написали =( В зависимости от какого запроса будет меняться адрес? Где вообще в коде какие-то запросы? |
| Автор: KSURi 20.1.2008, 18:38 |
| Так, виноват, извиняюсь. Про peerhost я погорячился: забыл, что имею дело с UDP. Оставьте как есть (я имею ввиду про вынесение за цикл). Однако, с $hishost все остается в силе: вы используете неинициализрованную переменную в кач-ве адреса для подключения (параметр PeerAddr на строке 11) и не понятно от каких "запросов" она будет зависить. P.S.: почистил предыдущий пост |
| Автор: gers 20.1.2008, 19:06 |
| блин вобщем подразобрался немного, все верно. $hishost = $sock->peerhost; $hishost переменная (айпи) возникает когда удаленный клиент посылает сообщение и происходит цикл: узнаем адрес удаленного клиента и посылаем ему ответное сообщение а проблема в том что PeerAddr =>$hishost должен выглядеть так PeerAddr =>'$hishost' только непойму как надо в этом случае экранировать переменную внутри ковычек? или переменную желательно заключить в ковычки еще раньше? |
| Автор: nitr 20.1.2008, 19:35 | ||||||
Чушь это. Я не знаю чего вы хотите получить, но у вас "слишком простое приложение", чтобы назвать его более менее полноценным сервером-клиетом. udp.pl
client.pl
Но верно ли это всё? |
| Автор: gers 20.1.2008, 22:53 |
| Большое спасибо за помощь ребята, я немного не стого начал... |