|
|
|
Помогите отладить код
|
|||
|---|---|---|---|
|
#18+
Народ, помогите отладить код: создал класс для отправки почты #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. Заранее спасибо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.09.2005, 16:52 |
|
||
|
Помогите отладить код
|
|||
|---|---|---|---|
|
#18+
Неужели всем в облом!? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.09.2005, 22:12 |
|
||
|
Помогите отладить код
|
|||
|---|---|---|---|
|
#18+
а почему не пользуешся Indy ? она же в разы лучше ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.09.2005, 23:31 |
|
||
|
Помогите отладить код
|
|||
|---|---|---|---|
|
#18+
Люди старались, придумывали тэг Код: plaintext Не вижу определения Host Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.09.2005, 06:26 |
|
||
|
Помогите отладить код
|
|||
|---|---|---|---|
|
#18+
определен в секции private: TSockAddrIn *Host; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.09.2005, 09:52 |
|
||
|
Помогите отладить код
|
|||
|---|---|---|---|
|
#18+
А инициализация где ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.09.2005, 09:54 |
|
||
|
Помогите отладить код
|
|||
|---|---|---|---|
|
#18+
Host->sin_family = AF_INET; Host->sin_port = Port; Host->sin_addr.S_un.S_addr = Res; А как надо? Через new? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.09.2005, 10:53 |
|
||
|
Помогите отладить код
|
|||
|---|---|---|---|
|
#18+
Serega128Host->sin_family = AF_INET; Host->sin_port = Port; Host->sin_addr.S_un.S_addr = Res; А как надо? Через new? Да. А ты как думал? Объявление переменной в виде: TSockAddrIn *Host; приведет к выделению памяти только под эту переменную, а экземпляр класса, связанный с перемнной, создан не будет.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.09.2005, 10:59 |
|
||
|
Помогите отладить код
|
|||
|---|---|---|---|
|
#18+
Верно. Просто передирал с паскаля. Глупый. Теперь правда коннектиться нехочет :( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.09.2005, 11:19 |
|
||
|
Помогите отладить код
|
|||
|---|---|---|---|
|
#18+
кусок переписал так: 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; Почему такое происходит? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.09.2005, 11:52 |
|
||
|
Помогите отладить код
|
|||
|---|---|---|---|
|
#18+
Что-то неправильно заполняешь, смотри код ошибки Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.09.2005, 12:27 |
|
||
|
Помогите отладить код
|
|||
|---|---|---|---|
|
#18+
А на той стороне у тебя слушающий сокет-то есть? :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.09.2005, 12:56 |
|
||
|
Помогите отладить код
|
|||
|---|---|---|---|
|
#18+
Да, там СМТП - сервер работает. Добавил ещё вот такое: if(bind (Sock, (sockaddr*)&Host, sizeof(Host)) == SOCKET_ERROR) return 0; Вылазит SOCKET_ERROR. Ерунда какая-то. :( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.09.2005, 13:28 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=33280055&tid=2032749]: |
0ms |
get settings: |
10ms |
get forum list: |
16ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
52ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
52ms |
get tp. blocked users: |
1ms |
| others: | 240ms |
| total: | 387ms |

| 0 / 0 |
