Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Интернет и сети
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 18.04.2011, 13:46
lux16 lux16 вне форума
Прохожий
 
Регистрация: 28.08.2010
Сообщения: 22
Репутация: 10
Восклицание Динамический массив в Record и отправка его через сокеты

Привет, народ. Столкнулся с проблемой. Есть такая структура:
Код:
  aData = Packed Record
    aArr:   Array Of String;
  End;
И такие процедуры:
Код:
procedure TForm1.ServerSocket1ClientConnect(Sender: TObject;
  Socket: TCustomWinSocket);
var
  rec:  aData;
begin
  SetLength( rec.aArr, 3 );
  rec.aArr[1] := '1';
  rec.aArr[2] := '2';
  Socket.SendBuf( rec, SizeOf( rec ) );
end;

procedure TForm1.ClientSocket1Read(Sender: TObject;
  Socket: TCustomWinSocket);
var
  rec:  aData;
  len:  Byte;
begin
  len := Socket.ReceiveLength;
  Socket.ReceiveBuf( rec, len );
  Memo1.Lines.Add( rec.aArr[1] );
end;
И в Memo1 просто добовляется пустая строка, но если в процедуре procedure TForm1.ServerSocket1ClientConnect(Sender: TObject;
Socket: TCustomWinSocket); добавить строку ShowMessage( '' );, то есть привести ее к такому виду:
Код:
procedure TForm1.ServerSocket1ClientConnect(Sender: TObject;
  Socket: TCustomWinSocket);
var
  rec:  aData;
begin
  SetLength( rec.aArr, 3 );
  rec.aArr[1] := '1';
  rec.aArr[2] := '2';
  Socket.SendBuf( rec, SizeOf( rec ) );
  ShowMessage( '' );
end;
То все работает, и в Memo1 добовляется строка. Подскажите, что кто знает
Ответить с цитированием
  #2  
Старый 18.04.2011, 14:06
Аватар для Aristarh Dark
Aristarh Dark Aristarh Dark вне форума
Модератор
 
Регистрация: 07.10.2005
Адрес: Москва
Сообщения: 2,906
Версия Delphi: Delphi XE
Репутация: выкл
По умолчанию

Ты передаешь всего 4 байта, и то что у тебя иногда что-то выводится - это случайность.
__________________
Некоторые программисты настолько ленивы, что сразу пишут рабочий код.

Если вас наказали ни за что - радуйтесь: вы ни в чем не виноваты.
Ответить с цитированием
  #3  
Старый 18.04.2011, 14:11
lux16 lux16 вне форума
Прохожий
 
Регистрация: 28.08.2010
Сообщения: 22
Репутация: 10
По умолчанию

Цитата:
Сообщение от Aristarh Dark
Ты передаешь всего 4 байта, и то что у тебя иногда что-то выводится - это случайность.
Не, это фигня не пашет при любом размере, я и модифицировал структуру, и добовлял много данных - все равно. При стрктуре с обычным массиве Array[1 .. 10] Of String например, все работает, а с динамикой никак
Ответить с цитированием
  #4  
Старый 18.04.2011, 14:28
Аватар для Aristarh Dark
Aristarh Dark Aristarh Dark вне форума
Модератор
 
Регистрация: 07.10.2005
Адрес: Москва
Сообщения: 2,906
Версия Delphi: Delphi XE
Репутация: выкл
По умолчанию

При чем тут размер?
Ты передаешь 4 (четыре) байта, потому что sizeof(rec) - всегда 4, потому что это по сути указатель.
__________________
Некоторые программисты настолько ленивы, что сразу пишут рабочий код.

Если вас наказали ни за что - радуйтесь: вы ни в чем не виноваты.
Ответить с цитированием
  #5  
Старый 18.04.2011, 14:48
lux16 lux16 вне форума
Прохожий
 
Регистрация: 28.08.2010
Сообщения: 22
Репутация: 10
По умолчанию

Цитата:
Сообщение от Aristarh Dark
При чем тут размер?
Ты передаешь 4 (четыре) байта, потому что sizeof(rec) - всегда 4, потому что это по сути указатель.
Хм, ясно. Хорошо, а почему тогда при не динамическом массиве все нормально пашет. Может знаешь как исправить, очень надо
Ответить с цитированием
  #6  
Старый 18.04.2011, 15:37
lux16 lux16 вне форума
Прохожий
 
Регистрация: 28.08.2010
Сообщения: 22
Репутация: 10
По умолчанию

Спасибо всем, нашел решение. После отправки пишу следующий код: Application.ProccesMessages;
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 18:50.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter