Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Asm для Windows/Dos > winsockets & SMTP


Автор: agv 17.12.2004, 03:21
помогите пожалуста разобратся с "програмой". По идеи должна конектится к майл.ру и посылать письмо, но оно не посылается smile
Покажите где ошибки плиз
Код
    .386
    .model flat, stdcall
    option casemap :none
    include \masm32\include\windows.inc
    include \masm32\include\user32.inc
    include \masm32\include\kernel32.inc
    include \MASM32\INCLUDE\wsock32.inc

    includelib \masm32\lib\user32.lib
    includelib \masm32\lib\kernel32.lib
    includelib \masm32\\LIB\WSOCK32.LIB

   .data?
   sockhandle DD ?
   buffrecive DD ?
  .data

   comhelo     DB    "helo asd",0Dh,0Ah
   commailfrom DB    "MAIL FROM: [email protected]",0Dh,0Ah
   comrcptto   DB    "RCPT TO: [email protected]",0Dh,0Ah
   comdata     DB    "DATA",0Dh,0Ah
   comquit     DB    "QUIT",0Dh,0Ah
   comfrom     DB    "FROM: [email protected]",0Dh,0Ah
   comto       DB    "TO: [email protected]",0Dh,0Ah
   comsubj     DB    "SUBJECT: helo",0Dh,0Ah
   

   msgmail     DB    "Helo",0Dh,0Ah
   endmsg      DB    0Dh,0Ah,".",0Dh,0Ah
   hostip      DB    "194.67.23.111",0
   msgok       DB    "OK",0
   msgno       DB    "NO",0
   
   wsaData WSADATA<>
   sa  sockaddr_in<>

  .code

start:

invoke WSAStartup,0101h,ADDR wsaData
   cmp eax,0
      jne  err
     
invoke socket,2,1,0
   cmp eax,-1
       je err
mov sockhandle,eax
       
mov sa.sin_family,02
invoke htons,25
mov word ptr [sa.sin_port],ax

invoke inet_addr,addr hostip
   cmp eax,0
       je err
mov dword ptr sa.sin_addr,eax

invoke connect,sockhandle,addr sa,SIZEOF sa
cmp eax,-1
je err

;     OK   we are connected

mov ecx,sizeof comhelo
mov esi,offset comhelo
call mysend
call myrecv
mov ecx,sizeof commailfrom
mov esi,offset commailfrom
call mysend
call myrecv
mov ecx,sizeof comrcptto
mov esi,offset comrcptto
call mysend
call myrecv
mov ecx,sizeof comdata
mov esi,offset comdata
call mysend
call myrecv
mov ecx,sizeof comfrom
mov esi,offset comfrom
call mysend
mov ecx,sizeof comto
mov esi,offset comto
call mysend
mov ecx,sizeof comsubj
mov esi,offset comsubj
call mysend
mov ecx,sizeof msgmail
mov esi,offset msgmail
call mysend
call myrecv
mov ecx,sizeof endmsg
mov esi,offset endmsg
call mysend
call myrecv
mov ecx,sizeof comquit
mov esi,offset comquit
call mysend


   invoke MessageBox,NULL,addr msgok,addr msgok,MB_OK
   invoke ExitProcess,NULL

invoke closesocket,sockhandle
invoke WSACleanup
invoke ExitProcess,0


err:
invoke MessageBox,0,addr msgno,addr msgno,MB_OKCANCEL
invoke WSACleanup
invoke ExitProcess,0


mysend:
; in ecx=num byte to send, esi=offset string to send

invoke send,sockhandle,esi,ecx,0
cmp eax,0
je err
ret

myrecv:
;out eax=first 4 bytes

invoke recv,sockhandle,addr buffrecive,04,0
   cmp eax,-1
       je err
   cmp eax,0
       je err
mov dword ptr eax,buffrecive
ret

  end start


Автор: agv 17.12.2004, 19:43
че никто незнает??

Автор: S.A.P. 17.12.2004, 19:46
agv, загляни в разле C++ сети. Я как то недавно задавал там этот вопрос.

Автор: agv 17.12.2004, 20:22
Perchilla
нашел, но не в том проблема.
я вручную отправлял и все нормально а прога.... smile

Автор: oleg1973 17.12.2004, 22:10
ну дак сервер че пищет?

Автор: agv 17.12.2004, 22:12
oleg1973
где пишет?

Автор: S.A.P. 17.12.2004, 22:21
recv вторым параметром каждый раз возвращает указатель на строку. Пропусти ее через отладчик и запости сюда.

Автор: oleg1973 17.12.2004, 22:24
через printf на консоль да и все smile

Автор: agv 17.12.2004, 22:52
oleg1973
какой printf яж на асме пишу.

2 all
вот что говорит
[запрос 1]
ответ: 220
[запрос 2]
ответ: mail
[запрос 3]
ответ: .ru
[запрос 4]
ответ: esmt
[запрос 5]
ответ: p fr
[запрос 6]
ответ: i, 1

Я уже сам понял что отвечает не то что надо.

подключился в ручную оказалось что это 1 строка того что говорит сервер при подключении:

220 mail.ru ESMTP Fri, 17 Dec 2004 ...

как это исправить???

Автор: S.A.P. 17.12.2004, 23:00
Вроде первым должен идти recv, чтобы принять ответ сервера, потом уже все остальное

Автор: oleg1973 17.12.2004, 23:02
agv
printf прекрасно импортируется из crtdll
да и все другие сишные функ

Автор: agv 17.12.2004, 23:03
Perchilla
нет. Делает то же самое
Добавлено @ 23:06
oleg1973
я незнал sory

Автор: agv 17.12.2004, 23:55
помогите кто знает плиз

Автор: oleg1973 18.12.2004, 00:25
Код

invoke connect,[mainsocket],sin,sizeof.sockaddr_in
invoke recv,[mainsocket],rbuff,2048,0

вот после конекта recv нужен

Автор: agv 18.12.2004, 00:54
oleg1973
спасибо все заработало smile smile smile


PS
invoke recv,[mainsocket],rbuff,2048,0

надо 2048 байт принимать или можно какоето другое число?

Автор: oleg1973 18.12.2004, 00:57
число указвает на размер буфера приема
а принятся может туда и 1 байт

Автор: agv 18.12.2004, 01:00
ок уже разобрался спасибо

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)