Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.07.25;
Скачать: CL | DM;

Вниз

проблема с сокетами   Найти похожие ветки 

 
Sup   (2005-04-13 22:40) [0]

Пишу программу для массовой рассылки(для хороших целей ;)... В цикле стоит: соединение с сервером,отправка письма,отсоединение. Почему в цикле recv иногда возвращет 0, всё должно быть нормально т.к. smtp-сервер локальный? Отпровляет допустим из 100 всего 87, каждый раз по разному...


 
Ozone ©   (2005-04-14 05:13) [1]

Мож хоть код покажешь, а?


 
Digitman ©   (2005-04-14 09:24) [2]


> Почему в цикле recv иногда возвращет 0


потому что WSAGetLastError


 
Sup   (2005-04-14 22:57) [3]

procedure TForm1.Method1;
var
 sSocket: integer;
 sock_addr: TSockAddr;
 aBuff: array[0..256] of char;
 sCmd: string;
 iBuff: integer;
 i,c: integer;
begin
 Progress.Progress:=0;
 Progress.MaxProgress:=Str2Int(Count.Text);
 for c:=1 to Str2Int(Count.Text) do begin
   {$WARNINGS OFF}
   sSocket:=socket(PF_INET,SOCK_STREAM,IPPROTO_IP);
   if sSocket=INVALID_SOCKET then begin
     exit;
   end;

   sock_addr.sa_family:=PF_INET;
   sock_addr.sin_addr.S_addr:=htons(INADDR_ANY);
   sock_addr.sin_addr:=LookupName(Servers.Text);
   sock_addr.sin_port:=htons(25);
   if connect(sSocket,sock_addr,sizeof(sock_addr))=SOCKET_ERROR then begin
     exit;
   end;

   iBuff:=recv(sSocket,aBuff,sizeof(aBuff),0);
   LogOk(aBuff,iBuff);

   sCmd:="HELO "+GetLocalHost+#13#10;
   CopyMemory(@aBuff,PChar(sCmd),length(sCmd));
   LogOk(aBuff,length(sCmd));
   WinSock.send(sSocket,aBuff,length(sCmd),0);

   iBuff:=recv(sSocket,aBuff,sizeof(aBuff),0);
   if Copy(aBuff,0,3)<>"250" then begin
     LogError(aBuff,iBuff);
     CloseSocket(sSocket);
     exit;
   end;
   LogOk(aBuff,iBuff);

   {TODO: Fix sFrom}
   sFrom:="3xmen@mail.ru";

   sCmd:="MAIL FROM:<"+sFrom+">"+#13#10;
   CopyMemory(@aBuff,PChar(sCmd),length(sCmd));
   LogOk(aBuff,length(sCmd));
   WinSock.send(sSocket,aBuff,length(sCmd),0);

   iBuff:=recv(sSocket,aBuff,sizeof(aBuff),0);
   if Copy(aBuff,0,3)<>"250" then begin
     LogError(aBuff,iBuff);
     CloseSocket(sSocket);
     exit;
   end;
   LogOk(aBuff,iBuff);

   for i:=0 to Abonents.Count-1 do begin
     sCmd:="RCPT TO:<"+Abonents.Items[i]+">"+#13#10;
     CopyMemory(@aBuff,PChar(sCmd),length(sCmd));
     LogOk(aBuff,length(sCmd));
     WinSock.send(sSocket,aBuff,length(sCmd),0);

     iBuff:=recv(sSocket,aBuff,sizeof(aBuff),0);
     if Copy(aBuff,0,3)<>"250" then begin
       LogError(aBuff,iBuff);
       CloseSocket(sSocket);
       exit;
     end;
     LogOk(aBuff,iBuff);
   end;

   sCmd:="DATA"+#13#10;
   CopyMemory(@aBuff,PChar(sCmd),length(sCmd));
   LogOk(aBuff,length(sCmd));
   WinSock.send(sSocket,aBuff,length(sCmd),0);

   iBuff:=recv(sSocket,aBuff,sizeof(aBuff),0);
   if Copy(aBuff,0,3)<>"354" then begin
     LogError(aBuff,iBuff);
     CloseSocket(sSocket);
     exit;
   end;
   LogOk(aBuff,iBuff);

   sCmd:=Send.Text;
   CopyMemory(@aBuff,PChar(sCmd),length(sCmd));
   LogOk(aBuff,length(sCmd));
   WinSock.send(sSocket,aBuff,length(sCmd),0);

   sCmd:=#13#10+"."+#13#10;
   CopyMemory(@aBuff,PChar(sCmd),length(sCmd));
   LogOk(aBuff,length(sCmd));
   WinSock.send(sSocket,aBuff,length(sCmd),0);

   iBuff:=recv(sSocket,aBuff,sizeof(aBuff),0);
   if Copy(aBuff,0,3)<>"250" then begin
     LogError(aBuff,iBuff);
     CloseSocket(sSocket);
     exit;
   end;
   LogOk(aBuff,iBuff);

   sCmd:="QUIT"+#13#10;
   CopyMemory(@aBuff,PChar(sCmd),length(sCmd));
   LogOk(aBuff,length(sCmd));
   WinSock.send(sSocket,aBuff,length(sCmd),0);

   iBuff:=recv(sSocket,aBuff,sizeof(aBuff),0);
   if Copy(aBuff,0,3)<>"221" then begin
     LogError(aBuff,iBuff);
     CloseSocket(sSocket);
     exit;
   end;

   CloseSocket(sSocket);
   LogOk(aBuff,iBuff);

   bOk:=true;
   Progress.Progress:=c;
   {$WARNINGS ON}
 end;
end;


 
Sup   (2005-04-15 23:00) [4]

WSAGetLastError показывает 10053
Чтоза нафиг?


 
Sup   (2005-04-15 23:01) [5]

Нашел следующие:
WSAECONNABORTED (10053): Виртуальный канал был прерван из-за истечения срока ожидания или из-за другой ошибки. Сетевое соединение прервано из-за перезагрузки.

Как это лечиться???


 
Digitman ©   (2005-04-16 13:21) [6]


> из-за перезагрузки


ну это, положим, еще бабушка надвое сказала

а вот это


> Виртуальный канал был прерван .. из-за другой ошибки


вполне реально - сервер, анализируя на предмет соответствия smtp-протоколу то что ты ему прислал в тот или иной момент, сделал вывод о несоответствии полученного протоколу и тут же закрыл соединение по своей инициативе, ибо галиматья


 
Dmitri_ru   (2005-04-16 13:43) [7]


> ибо галиматья

Скорее всего в коде :)...


 
Sup   (2005-04-16 23:02) [8]

Попрошу код не трогать :)
Не реально... сервер локальный(!!!), специально поставил, создал там юзера, письма доходят, только вот через раз... :(
Такая задумка обламывается из-за билгейтса... @#!
Может исходни скинуть посмотрите... Плиииииииииззззззззз... =)


 
Digitman ©   (2005-04-18 14:25) [9]


> Sup   (16.04.05 23:02) [8]
> Попрошу код не трогать


ой-ой-ой !
какие мы нежные !)
чтой-то вдруг ?


> Не реально


а вот мне думается иначе


> сервер локальный


да по барабану какой - хоть локальный , хоть не локальный ..


> обламывается из-за билгейтса


ну конечно ! а кто ж еще виноват, если не "билгейтса"..


> Может исходни скинуть посмотрите


да что на них лупиться, на исходникик твои ?
протоколируй все что посылаешь/принимаешь ... сравнивай с требованиями протокола smtp - скорей всего там, при сравнении, и увидишь свои ошибки


 
Sup   (2005-04-18 21:55) [10]

Если бы не проверял суда бы не постил... Нету ошибок, проверял раз 20 всяко разно... Хрень какаята а не сокеты... Ж(


 
Sup   (2005-04-18 22:25) [11]

2Digitman
Да и кстати не надо из себя строить супер героя... Не хочешь не отвечай не кто за яйца не тянет... Я ни чего не потребовал а лишь спросил а тут тебе гадость в лицо... Задолбало! ИМХО Форум для того и сделан чтоб задавать вопросы, возможно и глупые...



Страницы: 1 вся ветка

Текущий архив: 2005.07.25;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.069 c
9-1113236789
Gorger
2005-04-11 20:26
2005.07.25
Подскажите алгоритмы поворота


14-1120338791
АНТИСПАММЕР
2005-07-03 01:13
2005.07.25
- На самом деле самого дела нет.


1-1120638752
Demidoff
2005-07-06 12:32
2005.07.25
Переворот из книжной в альбомную?


3-1118412881
Lex_!
2005-06-10 18:14
2005.07.25
Отображение вычисляемого поля в DBGrid


14-1119959643
koderman
2005-06-28 15:54
2005.07.25
Тянем потянем, вытащили!