Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.04.2008, 12:56   #1
69 region
 
Аватар для 69 region
 
Регистрация: 11.04.2008
Сообщений: 8
По умолчанию Работа с Socket-ом c помощю WinAPI

Приветствую всех!
Я пишу программу, которая забирает письма с POP3 сервера и записывает их в файлы (каждое письмо в отдельный).
Для получения письма использую
следующий код:

command:='retr 1'#10;
send(ServSock,command[1],length(command),0);
memo1.Lines.Add(command);

assignfile(f,'letter 1.txt');
rewrite(f);
agr:=1 ;
ioctlsocket(servsock,FIONBIO,agr);
tv.tv_sec := 1;
tv.tv_usec := 0;
FD_SET(ServSock,wfds);

repeat
begin
recv(ServSock,buf,length(buf),0) ;
x:=select(0,@wfds,nil,nil,@tv);
memo1.Lines.Add(buf);
write(f,buf) ;
buf:='';
end;
until x<=0;

А проблема следующая:
При получении письма(цикл) происходит дубликование отднльных кусков письма (причем всегда по-разному).
Помогите кто чем может!
Компьютер позволяет решать все проблемы, которые до изобретения компьютера не существовали...
69 region вне форума Ответить с цитированием
Старый 11.04.2008, 13:13   #2
B_N
Новичок
Джуниор
 
Регистрация: 18.01.2008
Сообщений: 1,720
По умолчанию

Цитата:
Сообщение от 69 region Посмотреть сообщение
А проблема следующая:
При получении письма(цикл) происходит дубликование отднльных кусков письма (причем всегда по-разному).
Помогите кто чем может!
Эх... так мне понравилось
Цитата:
command:='retr 1'#10;
send(ServSock,command[1],length(command),0);
Давно таких штук не видел , и тут вдруг.. Бац!

Цитата:
recv(ServSock,buf,length(buf),0) ;
memo1.Lines.Add(buf);
write(f,buf) ;
Вы зачем заголовок у строки (ведь buf, судя по всему, - обычная паскальная строка?) перебиваете?
B_N вне форума Ответить с цитированием
Старый 11.04.2008, 13:25   #3
69 region
 
Аватар для 69 region
 
Регистрация: 11.04.2008
Сообщений: 8
По умолчанию Работа с Socket-ом c помощю WinAPI

Цитата:
Вы зачем заголовок у строки (ведь buf, судя по всему, - обычная паскальная строка?) перебиваете?
Поясните пожалста,а то я новичок...

Пытаюсь сделать по описанию...
Компьютер позволяет решать все проблемы, которые до изобретения компьютера не существовали...

Последний раз редактировалось Stilet; 11.04.2008 в 13:35.
69 region вне форума Ответить с цитированием
Старый 11.04.2008, 13:43   #4
B_N
Новичок
Джуниор
 
Регистрация: 18.01.2008
Сообщений: 1,720
По умолчанию

Цитата:
Сообщение от 69 region Посмотреть сообщение
Поясните пожалста,а то я новичок...

Пытаюсь сделать по описанию...
Если buf, как я предполагаю, строка, то строки в паскале устроены следующим образом: в нулевом элементе - длина строки, а в 1, 2 и т.д. - символы из которых она состоит. Вы передаёте в recv адрес строки, начиная с нулевого элемента и recv спокойненько пишет вместо длины строки всё, что ему свалилось, при этом (с точки зрения паскаля) строка может "вдруг" стать короче или длиннее, чем должна была бы быть. Я думаю, что если вызвать recv примерно вот так:
Код:
buf[0] := chr(recv(ServSock, @buf[1], 255, 0));
проблема должна решиться...
B_N вне форума Ответить с цитированием
Старый 11.04.2008, 13:53   #5
69 region
 
Аватар для 69 region
 
Регистрация: 11.04.2008
Сообщений: 8
По умолчанию

Да buf у меня является строкой, но длиннее чем 255,т.к. я его объявил
как:
buf:array[0..65000] of Char;

buf[0] := chr(recv(ServSock, @buf[1], 255, 0));
Не помогло...
Компьютер позволяет решать все проблемы, которые до изобретения компьютера не существовали...
69 region вне форума Ответить с цитированием
Старый 11.04.2008, 14:10   #6
B_N
Новичок
Джуниор
 
Регистрация: 18.01.2008
Сообщений: 1,720
По умолчанию

Цитата:
Сообщение от 69 region Посмотреть сообщение
Не помогло...
Попробуйте buf объявить обычной короткой строкой, для начала. И если не трудно, дайте глянуть на скриншот того, что получается в Memo.
B_N вне форума Ответить с цитированием
Старый 11.04.2008, 14:30   #7
69 region
 
Аватар для 69 region
 
Регистрация: 11.04.2008
Сообщений: 8
По умолчанию

Объявляю как:
Код:
buf:array[0..255] of Char;
т.к. при
Код:
buf:string;
выдает ошибку.

В Memo получается такой текст:

retr 2

+OK 2472 octets
Received: from office3d89b715 ([127.0.0.1])
by mail.ya2.com (Merak 7.6.0) with SMTP id DEMO
for <administrator@ya2.com>; Wed, 09 Apr 2008 10:21:05 +0400
Message-ID: <001901c89a09$e44bdfa0$7dc8a8c0@off ice3d89b715>
From:
яReceived: from office3d89b715 ([127.0.0.1])
by mail.ya2.com (Merak 7.6.0) with SMTP id DEMO
for <administrator@ya2.com>; Wed, 09 Apr 2008 10:21:05 +0400
Message-ID: <001901c89a09$e44bdfa0$7dc8a8c0@off ice3d89b715>
From: =?koi8-r?B?98HMx
яc7Uyc4g6MHIwc7P1w==?= <administrator@ya2.com>
To: <administrator@ya2.com>
Subject: Fw: test
Date: Wed, 9 Apr 2008 10:21:05 +0400
MIME-Version: 1.0
Content-Type: multipart/alternative;
boundary="----=_NextPart_000_0016_01C89A2B.6B5D7F A0"
X-Priority
Ћ: 3
X-MSMail-Priority: Normal
X-Mailer: Microsoft Outlook Express 6.00.2900.3138
X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.3198

я
This is a multi-part message in MIME format.

------=_NextPart_000_0016_01C89A2B.6B5D7F A0
Content-Type: text/plain;
charset="koi8-r"
Content-Transfer-Encoding: quoted-printable


----- Original Message -----=20
From: =F7=C1=CC=C5=CE=D4=C9=CE =
яE8=C1=C8=C1=CE=CF=D7=20
To: =F7=C1=CC=C5=CE=D4=C9=CE =E8=C1=C8=C1=CE=CF=D7=20
Sent: Wednesday, April 02, 2008 11:32 AM
Subject: test


test


__________ NOD32 3011 (20080408) Information __________

This message was checked by NOD32 antivirus s
ystem.
http://www.eset.com




__________ NOD32 3018 (20080411) Information __________

This message was checked by NOD32 antivirus system.
http://www.eset.com


я------=_NextPart_000_0016_01C89A2B.6B5D7F A0
Content-Type: text/html;
charset="koi8-r"
Content-Transfer-Encoding: quoted-printable

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META http-equiv=3DContent-Type content=
я3D"text/html; charset=3Dkoi8-r">
<META content=3D"MSHTML 6.00.2900.2802" name=3DGENERATOR>
<STYLE></STYLE>
</HEAD>
<BODY bgColor=3D#ffffff>
<DIV>&nbsp;</DIV>
<DIV style=3D"FONT: 10pt arial">----- Original Message -----=20
<DIV style=3D"BACKGROUND:
я#e4e4e4; font-color: black"><B>From:</B> <A=20
title=3Dadministrator@ya2.com =
href=3D"mailto:administrator@ya2.co m">=F7=C1=CC=C5=CE=D4=C9=CE=20
=E8=C1=C8=C1=CE=CF=D7</A> </DIV>
<DIV><B>To:</B> <A title=3Dadministrator@ya2.com=20
href=3D"mailto:admin
яistrator@ya2.com">=F7=C1=CC=C5=CE= D4=C9=CE =
=E8=C1=C8=C1=CE=CF=D7</A> </DIV>
<DIV><B>Sent:</B> Wednesday, April 02, 2008 11:32 AM</DIV>
<DIV><B>Subject:</B> test</DIV></DIV>
<DIV><BR></DIV>
<DIV><FONT face=3DArial size=3D2>test</FONT></DIV><BR><BR>_
В_________ =
NOD32 3011=20
(20080408) Information __________<BR><BR>This message was checked by =
NOD32=20
antivirus system.<BR><A=20
href=3D"http://www.eset.com">http://www.eset.com</A><BR>
З<BR>
<BR>
__________ NOD32 3018 (20080411) Information __________<BR>
<BR>
This message was checked by NOD32 antivirus system.<BR>
<A HREF=3D"http://www.eset.com">http://www.eset.com</A><BR>


A</BODY></HTML>

------=_NextPart_000_0016_01C89A2B.6B5D7F A0--


.


Многовато для лёгкого письма.
Компьютер позволяет решать все проблемы, которые до изобретения компьютера не существовали...
69 region вне форума Ответить с цитированием
Старый 11.04.2008, 14:46   #8
B_N
Новичок
Джуниор
 
Регистрация: 18.01.2008
Сообщений: 1,720
По умолчанию

Цитата:
Сообщение от 69 region Посмотреть сообщение
Многовато для лёгкого письма.
Что значит "многовато"?? Обычное мультипартное HTML-письмо. Где Вы там повторы нашли?
B_N вне форума Ответить с цитированием
Старый 11.04.2008, 14:48   #9
69 region
 
Аватар для 69 region
 
Регистрация: 11.04.2008
Сообщений: 8
По умолчанию

Цитата:
Где Вы там повторы нашли?
вот:
Received: from office3d89b715 ([127.0.0.1])
by mail.ya2.com (Merak 7.6.0) with SMTP id DEMO
for <administrator@ya2.com>; Wed, 09 Apr 2008 10:21:05 +0400
Message-ID: <001901c89a09$e44bdfa0$7dc8a8c0@off ice3d89b715>
From:

яReceived: from office3d89b715 ([127.0.0.1])
by mail.ya2.com (Merak 7.6.0) with SMTP id DEMO
for <administrator@ya2.com>; Wed, 09 Apr 2008 10:21:05 +0400
Message-ID: <001901c89a09$e44bdfa0$7dc8a8c0@off ice3d89b715>
From: =?koi8-r?B?98HMx
Компьютер позволяет решать все проблемы, которые до изобретения компьютера не существовали...
69 region вне форума Ответить с цитированием
Старый 11.04.2008, 15:06   #10
B_N
Новичок
Джуниор
 
Регистрация: 18.01.2008
Сообщений: 1,720
По умолчанию

Слушайте, ну у Вас же там антивирус стоит. Чёрт его знает, какой он путь достраивает в заголовке при проверке почты. Вы обычным почтовым клиентом проверяли? Там нет таких "удвоений"?
B_N вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
UDP & Socket Shouldercannon Работа с сетью в Delphi 14 13.10.2008 17:23
Socket Get Editor Работа с сетью в Delphi 7 22.04.2008 05:48
Организация поиска с помощю Полей со списком Ice_Juice Microsoft Office Access 1 16.03.2008 01:26
Работа Client i Server socket на уровнях модели OSI ilyano Работа с сетью в Delphi 3 31.10.2007 08:40
Socket Delphi 7 merax Работа с сетью в Delphi 1 09.02.2007 10:32