
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[216.73.216.52] |
![]() |
|
Страницы: (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 @ Ладно, я с ошибкой разобрался. Тему можно закрыть! Всем спасибо Разобрались - это плюс. ![]() А вот не поделились с коллегами о причине ее - это минус. Мы тут старались, время свое тратили на поиск ошибки, пытаясь вам помочь, и на тебе...секрет. Ведь форум учит не только ТС, но и всех других - чтобы они не делали подобных ошибок. ![]() А для закрытия темы нажмите справа вверху - Вопрос решен. |