Текущий архив: 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