Форум: "Сети";
Текущий архив: 2003.01.27;
Скачать: [xml.tar.bz2];
ВнизРабота с кокетами!!! Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.01 c