powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / входит и выходит - как это делаеться ?
2 сообщений из 2, страница 1 из 1
входит и выходит - как это делаеться ?
    #32226819
Marek Zdanowski
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ребята, всё просмотрел , всем пользовался но не получилось , вот послушаейте мою историю....


есть TObject "TFileIOStruct"

Код: plaintext
1.
2.
3.
4.
  type TFileIOStruct = class(TObject)
    Waddr,
    Wcount:Integer;
  end;


есть клиент и сервер, клиент хочит чтобы у него входил, а сервер хочет чтобы у него выходил Object...


на клиенте делаю так:
батон кликает

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
  FileIOStruct:=TFileIOStruct.Create;
  FileIOStruct.Waddr:=i* 30 ;
  FileIOStruct.Wcount:=sendSize;

  WriteLn('rIOData');
  WriteBuffer(FileIOStruct,SizeOf(FileIOStruct).......)



тоесть клиент после удачного соединения с сервером посилает ему Object "FileIOStruct"


на сервере сразу же срабатывает тревога, типа клиент нам что то подослал, сервер смотрит что данные прислались по команде "rIOData" и он понимает что клиент прислал Object, и теперь сервер делает обратный процесс

батон кликает (передастчик: client.thread.connection)
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
   
  FileIOStruct:=TFileIOStruct.Create;

  with ASender.Thread( здесь Peer thread).Connection do
  begin
    ReadXXXXXXX(FileIOStruct,SizeOf(FileIOStruct));
     /*всё то что по соединению мне выслал клиент считываю в FileIOStruct*/  

    showmessage(IntToStr(FileIOStruct.Waddr));
    showmessage(IntToStr(FileIOStruct.Wcount));
  end;





ребята, текст и потоки данных както нормально получаеться передавать между Client/server, а вот почемуто никак неполучаеться передать Object c данными на сервер, и потом на сервере прочитать данные этого обекта, как правильно по Connection-у передавать TObject порождённых особей....



благодарю
...
Рейтинг: 0 / 0
входит и выходит - как это делаеться ?
    #32226933
Дмитрий Мыльников
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну и что Вы в итоге передали? А передали Вы указатель на область памяти клиента, где хранятся данные Вашего объекта. :) И что с этим указателем должен делать Ваш сервер? :)

Короче, либо вместо объекта для передачи нужно завести тип record, тогда всё заработает. Либо передавайте все поля объекта, которые базовых типов, по отдельности. То есть, в Вашем примере будет что-то типа

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
на клиенте
....
  WriteBuffer(FileIOStruct.Waddr,sizeof(FileIOStruct.Waddr)); 
  WriteBuffer(FileIOStruct.Wcount,sizeof(FileIOStruct.Wcount)); 
....

на сервере, соотвествено
....
  FileIOStruct:=TFileIOStruct.Create; //если объект ещё не создан
  ReadBuffer(FileIOStruct.Waddr,sizeof(FileIOStruct.Waddr)); 
  ReadBuffer(FileIOStruct.Wcount,sizeof(FileIOStruct.Wcount)); 



при этом если у Вас тип поля в классе тоже будет классом, то тогда его тоже предется передавать разбирая на составляющие.

В общем, никогда не забывайте, то хотя мы и пишем просто
FileIOStruct.Waddr:=1;
но на самом деле все переменные объектов и классов в Delphi являются указателями на область памяти, которую возвращает конструктор класса.

Я бы в данном случае использовал структуры (record), а если уж очень нужны классы, то помещал эту структуру внутрь класса и в самом классе объявлял бы соответсвующие property. Кстати, для records при объявлении property допустимо следующее описание

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
  type TFileIOStructData = recod
    Waddr,
    Wcount:Integer;
  end;

  type TFileIOStruct = class(TObject)
    Data:TFileIOStructData;

    property Waddr:integer read Data.Waddr write Data.Waddr;
    property Wcount:integer read Data.Wcount write Data.Wcount;
  end;



при этом код клиента и сервера будет

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
на клиенте
....
  WriteBuffer(FileIOStruct.Data,sizeof(FileIOStruct.Data)); 
....

на сервере, соотвествено
....
  FileIOStruct:=TFileIOStruct.Create; //если объект ещё не создан
  ReadBuffer(FileIOStruct.Data,sizeof(FileIOStruct.Data)); 



То есть, если полей много, то код получается более компактным и читабельным. Да и ошибок будет меньше.
...
Рейтинг: 0 / 0
2 сообщений из 2, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / входит и выходит - как это делаеться ?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]