powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Помогите отладить код
14 сообщений из 14, страница 1 из 1
Помогите отладить код
    #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
Помогите отладить код
    #33280005
Фотография Serega128
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Неужели всем в облом!?
...
Рейтинг: 0 / 0
Помогите отладить код
    #33280055
Lepsik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а почему не пользуешся Indy ?

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

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

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

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

Теперь правда коннектиться нехочет :(
...
Рейтинг: 0 / 0
Помогите отладить код
    #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
Помогите отладить код
    #33280901
Карабас Барабас
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что-то неправильно заполняешь, смотри код ошибки
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Помогите отладить код
    #33280989
А на той стороне у тебя слушающий сокет-то есть? :)
...
Рейтинг: 0 / 0
Помогите отладить код
    #33281105
Фотография Serega128
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, там СМТП - сервер работает.

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

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

Вылазит SOCKET_ERROR.
Ерунда какая-то. :(
...
Рейтинг: 0 / 0
Помогите отладить код
    #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
14 сообщений из 14, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Помогите отладить код
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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