Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Работа с сетью в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.10.2011, 18:30   #1
Toland2
 
Регистрация: 10.10.2011
Сообщений: 7
По умолчанию Передать статический record по сети

Всем добрый вечер. Помогите пожалуйста разобраться с передачей по сети статического рекорда

Вот моя структура:
Код:
type
TArray_Data = packed record
  fText_a: String[10];
  a:integer;
end;
На форме клиента у меня есть таймер с интервалом 10мс. Вот код таймера:
Код:
procedure TForm1.Timer3Timer(Sender: TObject);
var 
Data:TArray_Data;
begin
 Data.fText_a:='Тут потом будет какой-нибудь текст';
 Data.a:=10;
 ClientSocket1.Socket.SendBuf(Data,Sizeof(Data));
end;

На сервере принимаю так:
Код:
//Unit1.pas
procedure TForm1.ServerSocket1GetThread(Sender: TObject;
  ClientSocket: TServerClientWinSocket;
  var SocketThread: TServerClientThread);
begin
    SocketThread := TMySocketThread.Create(False,ClientSocket);
end;


//Unit2.pas

Procedure TMySocketThread.ClientExecute;
Var Stream  : TWinSocketStream;
    L : Integer;
    var Data:TArray_Data;
Begin
  Try
    Stream := TWinSocketStream.Create(ClientSocket, 60000);
  Except
    ClientSocket.Close;
    Terminate;
    Exit;
  End;
  While (not Terminated) and ClientSocket.Connected do
  Begin
    If Stream.WaitForData(10) then
    Begin
      L := ClientSocket.ReceiveLength; 
      If L = 0 then
      Begin
        ClientSocket.Close;
        Terminate;
        Break;
      End;
        ClientSocket.ReceiveBuf(Data,SizeOf(Data);
       //Тут выполняется какое-нибудь действие с полученными данным
      form1.memo1.lines.add(Data.fText_a);
      form1.Shape1.left:=form1.shape1.left+Data.a;
    End;
  End;
  Stream.Free;
End;
Проблема заключается в том, что когда запускаю клиент и сервер на разных компьютерах,
TShape двигается достаточно медленно и рывками, а когда запускаю на одном компе - все происходит как надо.

Подскажите пожалуйста, правильно ли я делаю? Может есть другой, более оптимальный способ для этого?
Toland2 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
DLL, type RECORD, как передать данные в него? Человек_Борща Общие вопросы Delphi 3 08.09.2011 02:25
Статический класс stscolt PHP 4 20.05.2011 11:38
В чём различие записей Record от Packed Record? Terran Общие вопросы Delphi 7 08.06.2010 17:14
Record / Packed Record Alex Cones Общие вопросы Delphi 7 11.11.2009 10:43
Как передать параметру записи, что в нем параметр это статический массив с данными? SkAndrew Общие вопросы Delphi 6 26.06.2009 02:02