Форум: "WinAPI";
Текущий архив: 2002.07.01;
Скачать: [xml.tar.bz2];
ВнизКак на 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 вся ветка
Форум: "WinAPI";
Текущий архив: 2002.07.01;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.006 c