Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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.01 c
14-1166
Joke
2002-05-29 17:18
2002.07.01
Срочно нужен т.н. граббер экрана под ДОС!


3-874
Rk0d1
2002-06-06 12:37
2002.07.01
insert...select


1-971
akim2
2002-06-19 20:09
2002.07.01
Помогите пож с ListView


3-881
Ola
2002-06-07 08:36
2002.07.01
Экспорт!!!!


1-1026
Yanky-Fam
2002-06-17 21:52
2002.07.01
Вопрос есть...





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский