![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Работа с кокетами!!! [D5, Win95/98, Win2k]
XED © (2002-11-28 13:40:00)Кто знает как передать по сокету какойта тип:
Data=Record
i,j:Integer;
S:String[40];
L:Array[0..100] of Integer;
end;
Как передать вот такую запись клиенту и серверу не создавая файла для передачи!!!(а как передать StringList)
XED (2002-11-28 18:06:00) [1]Огромное спасибо!!!
Digitman (2002-11-28 17:06:00) [2]
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 = packedrecord
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 16:44:00) [3]А примерчик показать можеш!!!
Digitman (2002-11-28 13:46:00) [4]Я знаю.
И какие сложности у тебя с этим ?