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

Вниз

Работа с кокетами!!!   Найти похожие ветки 

 
XED ©   (2002-11-28 13:40) [0]

Кто знает как передать по сокету какойта тип:
Data=Record
i,j:Integer;
S:String[40];
L:Array[0..100] of Integer;
end;
Как передать вот такую запись клиенту и серверу не создавая файла для передачи!!!(а как передать StringList)


 
Digitman ©   (2002-11-28 13:46) [1]

Я знаю.
И какие сложности у тебя с этим ?


 
XED ©   (2002-11-28 16:44) [2]

А примерчик показать можеш!!!


 
Digitman ©   (2002-11-28 17:06) [3]


TMyStream = class(TMemoryStream)
private
FSocket: TCustomWinSocket;
FOnDestroy: TSocketNotifyEvent;
protected
procedure AfterConstruction; override;
public
constructor Create(Socket: TCustomWinSocket);
destructor Destroy; override;
property OnDestroy: TNotifyEvent read FOnDestroy write FOnDestroy;
end;

constructor TMyStream.Create(Socket: TCustomWinSocket);
begin
inherited Create;
FSocket := Socket;
end;

destructor TMyStream.Destroy;
begin
if Assigned(FOnDestroy) then
FOnDestroy(Self, FSocket);
inherited;
end;

procedure TMyStream.AfterConstruction;
begin
FOnDestroy := nil;
end;

procedure TMyForm.ServerSocketClientConnect(Sender: TObject; ClientSocket: TCustomWinSocket);
begin
ClientSocket.Data := nil;
end;

procedure TMyForm.ServerSocketClientDisconnect(Sender: TObject; ClientSocket: TCustomWinSocket);
begin
try
TMyStream(ClientSocket.Data).Free;
except
end;
end;

procedure TMyForm.ServerSocketClientWrite(Sender: TObject; ClientSocket: TCustomWinSocket);
begin
if Assigned(ClientSocket.Data) then
ClientSocket.SendStream(TMyStream(ClientSocket.Data));
end;

procedure TMyForm.OnStreamDestroy(Sender: TObject; Socket: TCustomWinSocket);
begin
if Sender = Socket.Data then
Socket.Data := nil;
end;

type

PMyRecord = ^TMyRecord;
TMyRecord = packed record
i,j:Integer;
S:String[40];
L:Array[0..100] of Integer;
end;

procedure SendMyRecord(MyRecord: PMyRecord; MySocket: TCustomWinSocket);
var
MyStream: TMyStream;
CurStreamPos: Integer;
begin
MyStream := TMyStream(MySocket.Data);
if not Assigned(MyStream) then
begin
MyStream := TMyStream.Create(MySocket);
MyStream.OnDestroy := OnStreamDestroy;
end;
with MyStream do
begin
CurStreamPos := Position;
Position := Size;
Write(MyRecord, SizeOf(MyRecord^));
Position := CurStreamPos;
end;
MySocket.SendStream(MyStream);
end;

...
var
MyRecord: PMyRecord;
...
New(MyRecord);
try
with MyRecord^ do
begin
i := ...;
j := ...;
....
end;

SendMyRecord(MyRecord, ClientSocket.Socket); // клиент передает серверу
... или
SendMyRecord(MyRecord, ServerSocket.Socket.Connections[X]); // сервер сервер передает клиенту X

finally
Dispose(MyRecord);
end;



 
XED ©   (2002-11-28 18:06) [4]

Огромное спасибо!!!



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

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

Наверх




Память: 0.47 MB
Время: 0.023 c
3-86695
S
2003-01-05 12:42
2003.01.27
Вопрос создания таблицы в access?


3-86675
dkok
2003-01-06 15:17
2003.01.27
Есть ли окраничения на процедуры Interbase?


1-86792
kostya2000
2003-01-17 16:32
2003.01.27
Как проиграть поток в Media Player?


1-86762
Kurt_
2003-01-17 16:20
2003.01.27
Тут торможу слегка, подскажите люди как открыть фал для записи чт


1-86908
Chizh
2003-01-15 22:43
2003.01.27
Как в CheckListBox по нажатию кнопки выделить все Items ы?