Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 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
3-86681
Stvaffniy
2003-01-06 01:30
2003.01.27
Problema s imenem fayla i nazvaniyami zagolovkov (Win 2000 NT)


3-86706
SasaR
2003-01-09 14:57
2003.01.27
TFIBDataSet


1-86924
Chainik
2003-01-16 14:27
2003.01.27
Подскажите как можно сделать доступным выбор сетевого окружения.


3-86631
CAMOBAP
2003-01-10 08:43
2003.01.27
Обращение к Query через цикл


14-87086
Дмитрий К.К.
2003-01-09 06:05
2003.01.27
Именинники 9 января





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский