а то у меня что, нет ответа(прога просто сидит и ждет будет ли ей ответ и все....а рузультата за минуту никакого, хотя конект прошол хорошо
вот пример кода, мож я что то тут не правильно делаю(за дельфи просьба не ругать!) var host:string; s:string; begin if bool(WSAStartup(MakeWord(2,0),wsa)) then MessageBox(0,'error','',0); {host:=''; } host:='194.67.23.111'; FillChar(addr,SizeOf(addr),0); addr.sin_family:=AF_INET; addr.sin_addr.S_addr:=inet_addr(Pchar(host)); addr.sin_port:=htons(2525); Fsock:=socket(AF_INET,SOCK_STREAM,0); if (Fsock=INVALID_SOCKET) then MessageBox(0,'INVALID_SOCKET','Socket',0); Writeln('CreateSocket'); Fsock:=socket(AF_INET,SOCK_STREAM,0); if connect(Fsock,@addr,SizeOf(addr))=SOCKET_ERROR then MessageBox(0,'SOCKET_ERROR','Connect',0) else begin Writeln('Connect is good'); s:='EHLO '; send(FSock,S,Length(s),MSG_PEEK); Writeln('SendData'); s:=''; recv(Fsock,S,255,MSG_OOB); Writeln('Recv'); closesocket(Fsock); MessageBox(0,'SocketClose',Pchar(s),0); end; {if send(FSock,host,length(host),MSG_OOB )=SOCKET_ERROR then MessageBox(0,'error','SendSocket',0); } {if closesocket(Fsock)=SOCKET_ERROR then MessageBox(0,'error','CloseSocket',0); } end.
SMTP - строчный протокол. То есть каждая команда вызывает ответ. Делай recv(). http://en.wikipedia.org/wiki/Simple_Mail_Transfer_Protocol
Так я то и делаю!!! но чегото переменная s, пустая а она по идее как минимум должна содержать текст типа неправильная команда
1) send() вызывать вот так: send(m_socket, sData.c_str(), sData.size(), 0); 2) recv() вот так: int size = recv(m_socket, (char *)buff, buffSize, 0); 3) проверяй значение которое эти ф-ции возвращают
дайте наверно пример с получение и отправкой команду серверу по протоколу смтп, а то у меня не чего толком не виходит...прога сидит и ждет и все а потом в переменную не чего не записывает(((
XshStasX Ти рюсский гидэ учылъ? короче смысл: Ты ему строку - он тебе строку. Всё. Вернее, не так: Если SMTP, то Он тебе строку - ты ему строку. Не забывай про \r\n
у меня даные отправляются, но вот делал на у себя тестовой сервер(127,0,0,1) так когда это сервер принимает дание то в них какойто бред, также когда сервер отсылает дание обратно моей проге она тож получает не известно(пустая строка) что,зато функция приема даних от сервера возвращает значение которое равняется количеству байт которые отправил сервер.(в качестве типа строки пробывал такие типы LPSTR,PWideChar,Pchar,string. что я не так делаю? var host:pchar; s:Pchar; sh:pchar; count:Cardinal; begin if bool(WSAStartup(MakeWord(2,0),wsa)) then MessageBox(0,'error','',0); host:=Pchar(GetMemory(256)); host:='194.67.23.111'; FillChar(addr,SizeOf(addr),0); addr.sin_family:=AF_INET; addr.sin_addr.S_addr:=inet_addr(Pchar(host)); addr.sin_port:=htons(2525); Fsock:=socket(AF_INET,SOCK_STREAM,0); if (Fsock=INVALID_SOCKET) then MessageBox(0,'INVALID_SOCKET','Socket',0); Writeln('CreateSocket'); Fsock:=socket(AF_INET,SOCK_STREAM,0); if connect(Fsock,@addr,SizeOf(addr))=SOCKET_ERROR then MessageBox(0,'SOCKET_ERROR','Connect',0) else begin Writeln('Connect is good'); s:='HELLO'#13#10; count:= send(FSock,Pchar(S),Length(s),0); Writeln('SendByte:',count); s:=''; sh:='fjghjgfj'; sh:=PChar(GetMemory(256)); count:= recv(Fsock,sh,length(sh),0); writeln('GetByte:',count); Writeln('Recv:',sh); closesocket(Fsock); MessageBox(0,'SocketClose',Pchar(s),0); readln; end; end.
1) Fsock:=socket(AF_INET,SOCK_STREAM, IPPROTO_TCP); 2) убери второй вызов 3) после connect() дождись сообщения от сервера - должен получить "220 smtp.example.com ESMTP Postfix some data here" 4) потом делай send() 5) потом ещё один recv()
XshStasX какая разница паскаль/асм/Це? асм тебе погоду не сделает, разобрался с паскалём бы сначала, но если не имётся http://www.wasm.ru/article.php?article=1016002 и к почте коннектятся на 25, а НЕ 2525 (!) порт, если что. З. Ы! [Exp10der@localhost ~]$ telnet 194.67.23.111 2525 Trying 194.67.23.111... telnet: connect to address 194.67.23.111: Connection refused [Exp10der@localhost ~]$ telnet 194.67.23.111 25 Trying 194.67.23.111... Connected to 194.67.23.111. Escape character is '^]'. 220 mail.ru ESMTP Fri, 05 Dec 2008 21:00:07 +0300 что и требовалось доказать.
на маил ру иногда 2525 или 25 или еще есть 877(если не ошибаюсь) посмотри инфу о настройке почти на маил ру. и с паскалем я то разобрался...а прошу на асме ...так как помнится на васме очень не нравился дельфийский код! да и на дельфи фроде все правильно зделал....но что то ответ то есть, но там полний бред!!! написано что я получил 6 байт (к примеру) а символов токо 3, и такое чуство что это просто мусор в памяти программы
IPPROTO_TCP в коннекте указал последним параметром? recv после коннекта добавил? да и sh у тебя указатель на буффер, а не сам буффер вот и возвращает чёрти что - замени на sh^ (или ^sh точно не помню), или вообще.. var buf: array [0..$FF] of char; .. recv(fsock, buf, $100, 0); // в дельфе тут сам буффер указывается, а не указатель на него плохо разобрался, нельзя путать данные и указатели. это дело вкуса, я лично масм и дельфю с асм вставочками предпочитаю, хотя кому как, но Це я не переношу просто физически.