|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Динамический массив в 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; 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; |
#2
|
||||
|
||||
Ты передаешь всего 4 байта, и то что у тебя иногда что-то выводится - это случайность.
Некоторые программисты настолько ленивы, что сразу пишут рабочий код. Если вас наказали ни за что - радуйтесь: вы ни в чем не виноваты. |
#3
|
|||
|
|||
Цитата:
|
#4
|
||||
|
||||
При чем тут размер?
Ты передаешь 4 (четыре) байта, потому что sizeof(rec) - всегда 4, потому что это по сути указатель. Некоторые программисты настолько ленивы, что сразу пишут рабочий код. Если вас наказали ни за что - радуйтесь: вы ни в чем не виноваты. |
#5
|
|||
|
|||
Цитата:
|
#6
|
|||
|
|||
Спасибо всем, нашел решение. После отправки пишу следующий код: Application.ProccesMessages;
|