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

Вниз

Как на API в Delphi программировать socket   Найти похожие ветки 

 
Kuha Kaladze   (2002-04-30 12:16) [0]

Помогите кто чем может
Задача следующая: необходимо дергать POP3 сервер
для этого надо использовать только API
Если есть исходники на Дельфи или ссылки пожалуйста поделитесь


 
слон   (2002-04-30 13:21) [1]

Иди ты на ...
www.firststeps.ru > VC++ > MFС > NET > TCP-IP

полный адрес к сожалению не помню но по дереву можно доползти


 
Kuha Kaladze   (2002-04-30 15:50) [2]

иди ты сам на ...
мне на Delphi надо


 
Digitman ©   (2002-04-30 17:24) [3]

>Kuha Kaladze

1. Сходить-таки все же полезно будет. Можно еще и вот сюда - http://books.itep.ru. Есть там вполне сносное описание ф-ций WinsockAPI.

2. Нет никакой разницы (за исключением синтаксических языковых особенностей) в вызове одних и тех же API-ф-ций из различных языковых сред. Важно одно - ф-ции должны вызываться в строго определенной последовательности, например, самой простейшей (в случае с POP3-протоколом) : WSAStartup(), socket(), connect(), send() + recv().. send() + recv().. closesocket(), WSACleanup().


 
Doom ©   (2002-04-30 23:04) [4]

Да, это уже и я уяснил и написал тоже. Вот вопрос как скажем файл прочитать прикрепленный когда он закодирован -- в RFC2949 я так и не нашел................


 
n\a   (2002-05-01 21:26) [5]

(для сохранения файлов) в recv используй буфер или array of char, а не strings и записывай его куда хочешь...
а вообще RFC почитай команы общения с сервером мыла...
если нет трабылов с "WSAStartup(), socket(), connect(), send() + recv().. send() + recv().. closesocket(), WSACleanup()"
то там все просто send(Команда); reciv(Ответ); и обрабатываешь...

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



 
Если   (2002-05-02 03:40) [6]

Удалено модератором


 
Doom ©   (2002-05-02 17:38) [7]


> 2n\a (01.05.02 21:26)

> (для сохранения файлов) в recv используй буфер или array
> of char, а не strings и записывай его куда хочешь...

а кто тебе сказал что я strings использую?


> если же сложно, залезь в папку Sources и глянь компоненты
> для работы с socket-ами... для начала...

а ты сам-то смотрел?
если в аттаче стоит Encoding 7 bit или Encoding print-quoted или Encoding base64, что тогда? И вопрос я по-моему задал не через какие функции общаются клиент и сервер, а о кодировке.


 
n\a   (2002-05-03 16:12) [8]

2Doom вообще то эта мессага была для Kuha Kaladze...
> а ты сам-то смотрел?
смотрел в свое время, прежде чем флэйм разводить в формуме...

по твоему вопросу:

function DecodeLine7Bit(Texto: String): String;
var
Buffer: PChar;
Encoding: Char;
Size: Integer;
nPos0: Integer;
nPos1: Integer;
nPos2: Integer;
nPos3: Integer;
Found: Boolean;

begin

Result := TrimSpace(Texto);

repeat

nPos0 := Pos("=?", Result);
Found := False;

if nPos0 > 0 then
begin

nPos1 := Pos("?", Copy(Result, nPos0+2, Length(Result)))+nPos0+1;
nPos2 := Pos("?=", Copy(Result, nPos1+1, Length(Result)))+nPos1;
nPos3 := Pos("?", Copy(Result, nPos2+1, Length(Result)))+nPos2;

if nPos3 > nPos2 then
begin

if Length(Result) > nPos3 then
begin

if Result[nPos3+1] = "=" then
begin

nPos2 := nPos3;
end;
end;
end;

if (nPos1 > nPos0) and (nPos2 > nPos1) then
begin

Texto := Copy(Result, nPos1+1, nPos2-nPos1-1);

if (Length(Texto) >= 2) and (Texto[2] = "?") and (UpCase(Texto[1]) in ["B", "Q", "U"]) then
begin

Encoding := UpCase(Texto[1]);
end
else
begin

Encoding := "Q";
end;

Texto := Copy(Texto, 3, Length(Texto)-2);

case Encoding of

"B":
begin

GetMem(Buffer, Length(Texto));
Size := DecodeLineBASE64(Texto, Buffer);
Buffer[Size] := #0;
Texto := String(Buffer);
end;

"Q":
begin

while Pos("_", Texto) > 0 do
Texto[Pos("_", Texto)] := #32;

Texto := DecodeQuotedPrintable(Texto);
end;

"U":
begin

GetMem(Buffer, Length(Texto));
Size := DecodeLineUUCODE(Texto, Buffer);
Buffer[Size] := #0;
Texto := String(Buffer);
end;
end;

Result := Copy(Result, 1, nPos0-1)+Texto+Copy(Result,nPos2+2,Length(Result));
Found := True;
end;
end;

until not Found;
end;


 
n\a   (2002-05-03 16:13) [9]

function DecodeQuotedPrintable(Texto: String): String;
var
nPos: Integer;
nLastPos: Integer;
lFound: Boolean;

begin

Result := Texto;

lFound := True;
nLastPos := 0;

while lFound do
begin

lFound := False;

if nLastPos < Length(Result) then
nPos := Pos("=", Copy(Result, nLastPos+1, Length(Result)-nLastPos))+nLastPos
else
nPos := 0;

if (nPos < (Length(Result)-1)) and (nPos > nLastPos) then
begin

if (Result[nPos+1] in ["A".."F", "0".."9"]) and (Result[nPos+2] in ["A".."F", "0".."9"]) then
begin

Insert(Char(StrToInt("$"+Result[nPos+1]+Result[nPos+2])), Result, nPos);
Delete(Result, nPos+1, 3);
end
else
begin

if (Result[nPos+1] = #13) and (Result[nPos+2] = #10) then
begin

Delete(Result, nPos, 3);
Dec(nPos, 3);
end
else
begin

if (Result[nPos+1] = #10) and (Result[nPos+2] = #13) then
begin

Delete(Result, nPos, 3);
Dec(nPos, 3);
end
else
begin

if (Result[nPos+1] = #13) and (Result[nPos+2] <> #10) then
begin

Delete(Result, nPos, 2);
Dec(nPos, 2);
end
else
begin

if (Result[nPos+1] = #10) and (Result[nPos+2] <> #13) then
begin

Delete(Result, nPos, 2);
Dec(nPos, 2);
end;
end;
end;
end;
end;

lFound := True;
nLastPos := nPos;
end
else
begin

if nPos = Length(Result) then
begin

Delete(Result, nPos, 1);
end;
end;
end;
end;

function DecodeLineBASE64(const Buffer: String; Decoded: PChar): Integer;
var
A1: array[1..4] of Byte;
B1: array[1..3] of Byte;
I, J: Integer;
BytePtr, RealBytes: Integer;

begin

BytePtr := 0;
Result := 0;

for J := 1 to Length(Buffer) do
begin

Inc(BytePtr);

case Buffer[J] of

"A".."Z": A1[BytePtr] := Ord(Buffer[J])-65;

"a".."z": A1[BytePtr] := Ord(Buffer[J])-71;

"0".."9": A1[BytePtr] := Ord(Buffer[J])+4;

"+": A1[BytePtr] := 62;

"/": A1[BytePtr] := 63;

"=": A1[BytePtr] := 64;
end;

if BytePtr = 4 then
begin

BytePtr := 0;
RealBytes := 3;

if A1[1] = 64 then RealBytes:=0;

if A1[3] = 64 then
begin

A1[3] := 0;
A1[4] := 0;
RealBytes := 1;
end;

if A1[4] = 64 then
begin

A1[4] := 0;
RealBytes := 2;
end;

B1[1] := A1[1]*4 + (A1[2] div 16);
B1[2] := (A1[2] mod 16)*16+(A1[3] div 4);
B1[3] := (A1[3] mod 4)*64 + A1[4];

for I := 1 to RealBytes do
begin

Decoded[Result+I-1] := Chr(B1[I]);
end;

Inc(Result, RealBytes);
end;
end;
end;


 
n\a   (2002-05-03 16:15) [10]

PS: Сложно сходить на торри.ру и в поиксе вветси POP3?



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

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

Наверх




Память: 0.49 MB
Время: 0.013 c
4-1243
MisterBin
2002-05-02 16:26
2002.07.01
Как при наведении курсора на какое-то окно, чтобы оно минимизиров


7-1216
SONY
2002-04-04 06:48
2002.07.01
Как изменить настройки принтера по умолчанию


4-1254
Danger
2002-05-03 22:46
2002.07.01
Как получить длинное имя файла


3-893
maxim2
2002-06-07 13:30
2002.07.01
Опять про Mdi формы, теперь проблема с открытием


3-885
Duke2
2002-06-06 21:18
2002.07.01
Вопрос о разрушении BLOB в DBF и Paradox