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

Вниз

TCPSERVER - HELP!   Найти похожие ветки 

 
Bart   (2003-11-01 21:51) [0]

Задача передать поток данных от клиента серверу. Как решение был написан следующий класс:

unit class_tcpconnection;

interface

uses Sockets, IdGlobal, Classes;

type
TRing = procedure(MemSt: TMemoryStream) of object;
TLookup = procedure(i: Cardinal) of object;

TTCPConnection = class
private
FTCPServer: TTcpServer;
FRing: TRing;
FLook: TLookup;
procedure RecieveMethod(Sender: TObject; Buf: pchar; var DataLen: integer);
procedure AcceptMethod(Sender: TObject; ClientSocket: TCustomIpClient);
public
Constructor Create(Port: String; Ring: TRing; Look: TLookup; CreateSuspend: boolean = True);
Destructor Free;
end;

implementation

{ TTCPConnection }

procedure TTCPConnection.AcceptMethod(Sender: TObject;
ClientSocket: TCustomIpClient);
var
buff: char;
MemSt: TMemoryStream;
i: integer;
begin
FRing(nil);
ClientSocket.OnReceive := RecieveMethod;
ClientSocket.Open;

try
MemSt := TMemoryStream.Create;
for i := 0 to ClientSocket.BytesSent - 1 do begin
ClientSocket.ReceiveBuf(buff, 1);
MemSt.WriteBuffer(buff, 1);
end;
FRing(MemSt);
finally
MemSt.Free;
end;
end;

constructor TTCPConnection.Create(Port: String; Ring: TRing; Look: TLookup; CreateSuspend: boolean);
begin
FRing := Ring;
FTCPServer := TTcpServer.Create(nil);
FTCPServer.LocalPort := Port;
FTCPServer.OnReceive := RecieveMethod;
FTCPServer.OnAccept := AcceptMethod;
FTCPServer.Active := not CreateSuspend;
end;

destructor TTCPConnection.Free;
begin
if FTCPServer <> nil then begin
FTCPServer.Free;
FTCPServer := nil;
end;
end;

procedure TTCPConnection.RecieveMethod(Sender: TObject; Buf: pchar;
var DataLen: integer);
var
MemSt: TMemoryStream;
begin
FRing(nil);
MemSt := nil;
try
MemSt := TMemoryStream.Create;
MemSt.SetSize(DataLen);
FRing(MemSt);
finally
if MemSt <> nil then begin
MemSt.Clear;
MemSt.Free;
end;
end;
end;

end.

--------------
Метод AcceptMethod успешно отрабатывает, но в нем я не могу получить размер отправляемого потока (BytesRecived = 0)

Метод RecieveMethod - не отрабатывает в принципе :(
Но хелп упорно утверждает, что используя этот метод можно получить и буффер

ХЕЛП!


 
Rouse_ ©   (2003-11-02 17:40) [1]

Ну если Вы уж решили действовать таким методом то дополнительная нагрузка в виде TTcpServer Вам явно ни к чему. Проще реализовать свой класс на основе сокета. Там же и сможете конролировать все что Вам угодно...
Желаю успехов



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

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

Наверх




Память: 0.47 MB
Время: 0.021 c
1-99625
Пубертанец
2003-12-17 09:06
2003.12.30
Что есть в Дельфи для создания и парсинга XML-файлов?


7-99801
Alex-kosmonavt
2003-10-22 12:01
2003.12.30
Определить номер звонящего на модем (АОН)


14-99734
Desdechado
2003-12-05 16:53
2003.12.30
Кто пробовал Delphi 8


1-99517
Sour
2003-12-18 08:33
2003.12.30
Использование Delphi для WindowsCE


14-99757
Rafe
2003-12-07 02:46
2003.12.30
Сайт для он-лайн слежкой за результатами выборов...