Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Помогите отладить код / 14 сообщений из 14, страница 1 из 1
20.09.2005, 16:52
    #33279434
Serega128
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите отладить код
Народ, помогите отладить код:
создал класс для отправки почты

#include
#include

class TMail
{
public:
AnsiString Smtp; // IP-addr smtp
unsigned int Port; // smtp port
AnsiString From;
AnsiString Dest;
AnsiString Subj;
AnsiString Body;
bool mail()
{
try
{
WSAStartup(257, WSAData);
Sock = socket(AF_INET, SOCK_STREAM, IPPROTO_IP);
if(Sock == INVALID_SOCKET) return 0;

Res = inet_addr(Smtp.c_str());
if(!Res) return 0;

Host->sin_family = AF_INET;
Host->sin_port = Port;
Host->sin_addr.S_un.S_addr = Res;

if(connect(Sock, (const sockaddr*)Host, sizeof(Host)))
return 0;

if(!recvdata("220"))
return 0;

senddata("EHLO\r\n");
if(!recvdata("250"))
return 0;

senddata("MAIL FROM: " + From + "\r\n");
if(!recvdata("250"))
return 0;

senddata("RCPT TO:" + Dest + "\r\n");
if(!recvdata("250"))
return 0;

senddata("DATA\r\n");
if(!recvdata("354"))
return 0;

senddata("Subject:" + Subj + "\r\n\r\n" + Body + "\r\n.");
if(!recvdata("250"))
return 0;

senddata("QUIT\r\n");
}
__finally
{
closesocket(Sock);
WSACleanup();
return 1;
}
}



__fastcall TMail(){};

private:
TWSAData *WSAData;
TSockAddrIn *Host;
TSocket Sock;
int Res;
char Buff[255];

void __fastcall senddata(AnsiString str)
{
for(int i=0; i {
if(send(Sock, (const char*)str.c_str() , 1, 0) == SOCKET_ERROR)
return;
}
}
bool __fastcall recvdata(AnsiString accept)
{
char Buff[255];
Res = recv(Sock, Buff, sizeof(Buff), 0);
return (Res == SOCKET_ERROR) || (AnsiString(Buff).SubString(1, 3) == accept);
}
};



Использую так:

TMail *m = new TMail();
m->Port = 25;
m->From = "host@kiev.velton.ua";
m->Dest = "host@kiev.velton.ua";
m->Smtp = "85.90.192.130";
m->Body = "Test message";
m->mail();


А на строке:
Host->sin_family = AF_INET;
Вылазит exception.
Помгите найти проблему. Использую С++ Билдер6.
Заранее спасибо!
...
Рейтинг: 0 / 0
20.09.2005, 22:12
    #33280005
Serega128
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите отладить код
Неужели всем в облом!?
...
Рейтинг: 0 / 0
20.09.2005, 23:31
    #33280055
Lepsik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите отладить код
а почему не пользуешся Indy ?

она же в разы лучше ?
...
Рейтинг: 0 / 0
21.09.2005, 06:26
    #33280158
Карабас Барабас
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите отладить код
Люди старались, придумывали тэг
Код: plaintext
[src]
а тебе влом его использовать ?

Не вижу определения Host
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
21.09.2005, 09:52
    #33280389
Serega128
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите отладить код
определен в секции private:
TSockAddrIn *Host;
...
Рейтинг: 0 / 0
21.09.2005, 09:54
    #33280397
Карабас Барабас
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите отладить код
А инициализация где ?
...
Рейтинг: 0 / 0
21.09.2005, 10:53
    #33280577
Serega128
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите отладить код
Host->sin_family = AF_INET;
Host->sin_port = Port;
Host->sin_addr.S_un.S_addr = Res;

А как надо? Через new?
...
Рейтинг: 0 / 0
21.09.2005, 10:59
    #33280590
Станислав C.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите отладить код
Serega128Host->sin_family = AF_INET;
Host->sin_port = Port;
Host->sin_addr.S_un.S_addr = Res;

А как надо? Через new?
Да. А ты как думал?
Объявление переменной в виде: TSockAddrIn *Host; приведет к выделению памяти только под эту переменную, а экземпляр класса, связанный с перемнной, создан не будет....
...
Рейтинг: 0 / 0
21.09.2005, 11:19
    #33280658
Serega128
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите отладить код
Верно. Просто передирал с паскаля. Глупый.

Теперь правда коннектиться нехочет :(
...
Рейтинг: 0 / 0
21.09.2005, 11:52
    #33280787
Serega128
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите отладить код
кусок переписал так:

Host.sin_family = AF_INET;
Host.sin_port = htons(Port);
Host.sin_addr.s_addr = inet_addr(Smtp.c_str());

Но коннектиться он упорно нехочет:

if(connect(Sock, (struct sockaddr*)&Host, sizeof(Host)))
return 0;
Почему такое происходит?
...
Рейтинг: 0 / 0
21.09.2005, 12:27
    #33280901
Карабас Барабас
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите отладить код
Что-то неправильно заполняешь, смотри код ошибки
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
21.09.2005, 12:56
    #33280989
Помогите отладить код
А на той стороне у тебя слушающий сокет-то есть? :)
...
Рейтинг: 0 / 0
21.09.2005, 13:28
    #33281105
Serega128
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите отладить код
Да, там СМТП - сервер работает.

Добавил ещё вот такое:

if(bind (Sock, (sockaddr*)&Host, sizeof(Host)) == SOCKET_ERROR)
return 0;

Вылазит SOCKET_ERROR.
Ерунда какая-то. :(
...
Рейтинг: 0 / 0
21.09.2005, 13:30
    #33281108
Карабас Барабас
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите отладить код
Win32 SDKReturn Values

If no error occurs, bind returns zero. Otherwise, it returns SOCKET_ERROR, and a specific error code can be retrieved by calling WSAGetLastError .
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / Помогите отладить код / 14 сообщений из 14, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]