Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.97.9.175] |
|
Страницы: (2) 1 [2] все ( Перейти к последнему сообщению ) |
Сообщ.
#16
,
|
|
|
Цитата Oleg2004 @ Попробуйте привести к типу struct in_addr таким образом destination.sin_addr = * ((struct in_addr *) h-> h_addr); Тест я делал так: hostent *sh; //.. sh = ::gethostbyname(pName); //.. DWORD dwIP = ((in_addr* )sh->h_addr)->s_addr; //.. peer.sin_addr.s_addr = dwIP; //.. |
Сообщ.
#17
,
|
|
|
Скорее всего необходимые преобразования и приведения к типу можно выполнить несколькими способами.
Однако эта хрень что на втором аттаче это вообще ни в какие ворота... struct hostent { char *h_name; /* Официальное имя хоста.*/ char **h_aliases; /* Массив псевдонимов данного хоста, заканчивающийся нулем */ int h_addrtype; /* Тип возвращенного функцией адреса; для Интернет это AF_INET */ int h_length; /* Длина адреса в байтах. Для типа AF_INET длина всегда 4 байта */ char **h_addr_list; /* Указатель на массив указателей IPv4 (IPv6) адресов хоста. Он заканчивается нулем, порядок следования байтов сетевой. */ #define h_addr h_addr_list[0]/*Определяет h_addr как самый первый адрес хоста в списке*/ }; Ведь h_addr - это 4-х байтовый адрес хоста в сетевом порядке. Я пропинговал и получилось Pinging smtp.mail.ru [94.100.180.160] with 32 bytes of data: Адрес именно тот, который у вас на первой картинке - в s_b1 s_b2 s_b3 s_b4 А вот что и откуда взялось на второй? кракозябрыsmtp.mail.ru? Кстати, на той же первой картинке порт не 25-й, а 6400. Это так надо? Связка 94.100.180.160:6400 тоже даст bad address Кстати, было бы интересно посмотреть уходящий от коннекта первый TCP-SYN-сегмент программой типа TCPView, потому что в таблице TCP соединений соединение не зафиксировано, и адрес точки соединения там не виден. |
Сообщ.
#18
,
|
|
|
Цитата Oleg2004 @ Скорее всего необходимые преобразования и приведения к типу можно выполнить несколькими способами. Всё это будет работать: dwIP = ((in_addr* )sh->h_addr)->s_addr; dwIP = *(DWORD *) sh->h_addr_list[0]; dwIP = *(DWORD *) sh->h_addr; Выяснилось вот что: результат connect-а зависит от провайдера. Или системного администратора. С домашнего компа connect всегда удачный. С рабочего компа - всегда нет. Кто-то запретил.. |
Сообщ.
#19
,
|
|
|
Цитата ЫукпШ @ С домашнего компа connect всегда удачный. С рабочего компа - всегда нет. Кто-то запретил.. Ну, честно говоря я бы такие выводы не делал. Если бы такое происходило, реакция на коннект была бы другая. Все TCP- соединения начинаются с SYN-сегмента. И он должен уходить всегда. Если только на провайдере не отслеживаются все такие сегменты. Это практически невозможно. Т.е. бессмысленно. Разве что на каком то суперзасекреченном компе. Добавлено Однако судя по описанию ошибки Цитата Bad address (неверный адрес). Система обнаружила неверный указатель на адрес при попытке использовать его в вызове функции. Эта ошибка происходит при передачи приложением неверного указателя, или если размер буфера слишком мал - например, если длина аргумента, представляющего собой структуру типа sockaddr, меньше, чем sizeof(struct sockaddr). сегмент TCP вообще не инициируется. Т.е. из локального хоста он не уходит, так как функция встретила проблемы с указателем на ее параметр Блин, просто какой то бред - еще раз проверил код ТС - да нет, ошибки не вижу... Добавлено Единственная совершенно нетипичная команда для подобного кода, которая присутствует в коде, так это удаление аргумента функции gethost... h = gethostbyname(em); delete em; Зачем??? |
Сообщ.
#20
,
|
|
|
Цитата Oleg2004 @ Цитата ЫукпШ @ С домашнего компа connect всегда удачный. С рабочего компа - всегда нет. Кто-то запретил.. Ну, честно говоря я бы такие выводы не делал. Если бы такое происходило, реакция на коннект была бы другая. Да, я забыл упомянуть, что ошибка совсем другая. А именно - 10061. Очень часто это результат деятельности фиревола. В нашей организации так - что сделаешь.. До smtp - сервера конторы я дотягиваюсь, а во внешнии сети - нет. |
Сообщ.
#21
,
|
|
|
Цитата ЫукпШ @ А именно - 10061. |
Сообщ.
#22
,
|
|
|
Цитата Oleg2004 @ h = gethostbyname(em); delete em; Зачем??? В переменной em хранится строка с адресом (smtp.mail.ru). После того, как я вызываю функцию gethostbyname() я очищаю память этой переменной, т.к. она больше не нужна. Добавлено Сейчас ради интереса попробовал пропинговать любой внешний хост и результат был отрицательный. Пинг таких хостов как google.com, mail.ru, yandex.ru, smtp.mail.ru заканчиваются тем, что команде ping не удается обнаружить данные узлы. Не сильный эксперт в сетях, но, кажется, что существует какая-то блокировка или какой-то прокси. Кстати, пингую я и запускаю программу не с домашнего компьютера, а с рабочего. И как упомянул [ЫукпШ] возможно, с рабочего компьютера connect всегда завершается ошибкой. |
Сообщ.
#23
,
|
|
|
Цитата linuxoid @ Пинг таких хостов как google.com, mail.ru, yandex.ru, smtp.mail.ru заканчиваются тем, что команде ping не удается обнаружить данные узлы. Не сильный эксперт в сетях, но, кажется, что существует какая-то блокировка или какой-то прокси. Кстати, пингую я и запускаю программу не с домашнего компьютера, а с рабочего. С моего домашнего пингуются все. Цитата И как упомянул [ЫукпШ] возможно, с рабочего компьютера connect всегда завершается ошибкой. Ну так что мешает вашу прогу запустить с домашнего??? Но еще раз повторю - коннект с ошибкой 10014 вообще не покидает комп. Это не ошибка соединения или его блокировка файрволлом или провом. Это онибка в запуске коннекта - он вообще не запускается. Цитата linuxoid @ В переменной em хранится строка с адресом (smtp.mail.ru). После того, как я вызываю функцию gethostbyname() я очищаю память этой переменной, т.к. она больше не нужна. Это понятно... а смысл какой глубокий? Эта строка занимает пусть десяток байтов...Что за экономия? |
Сообщ.
#24
,
|
|
|
Цитата Oleg2004 @ Цитата linuxoid @ Пинг таких хостов как google.com, mail.ru, yandex.ru, smtp.mail.ru заканчиваются тем, что команде ping не удается обнаружить данные узлы. Не сильный эксперт в сетях, но, кажется, что существует какая-то блокировка или какой-то прокси. Кстати, пингую я и запускаю программу не с домашнего компьютера, а с рабочего. С моего домашнего пингуются все. Цитата И как упомянул [ЫукпШ] возможно, с рабочего компьютера connect всегда завершается ошибкой. Ну так что мешает вашу прогу запустить с домашнего??? Но еще раз повторю - коннект с ошибкой 10014 вообще не покидает комп. Это не ошибка соединения или его блокировка файрволлом или провом. Это онибка в запуске коннекта - он вообще не запускается. Цитата linuxoid @ В переменной em хранится строка с адресом (smtp.mail.ru). После того, как я вызываю функцию gethostbyname() я очищаю память этой переменной, т.к. она больше не нужна. Это понятно... а смысл какой глубокий? Эта строка занимает пусть десяток байтов...Что за экономия? Экономии может и нет, но это уже привычка. Так научили. Ладно, я с ошибкой разобрался. Тему можно закрыть! Всем спасибо |
Сообщ.
#25
,
|
|
|
Цитата linuxoid @ Ладно, я с ошибкой разобрался. Тему можно закрыть! Всем спасибо Разобрались - это плюс. А вот не поделились с коллегами о причине ее - это минус. Мы тут старались, время свое тратили на поиск ошибки, пытаясь вам помочь, и на тебе...секрет. Ведь форум учит не только ТС, но и всех других - чтобы они не делали подобных ошибок. А для закрытия темы нажмите справа вверху - Вопрос решен. |