![]() |
|
#1
|
||||
|
||||
![]() У меня есть пара вопросов...
1-можно ли при получении данных определить тип данных и дальше работать с ним, чтото типа такого Код:
procedure TMainForm.cSocketRead(Sender: TObject; Socket: TCustomWinSocket); begin if buf then... if text then... end; 2-Мне вот нужно передавать текст(string) и packed record что лучше использовать SendBuf или SendText... |
#2
|
||||
|
||||
![]() Определить никак. Пересылается только "буфер" - поток байт. А SendText/ReceiveText - обертка над SendBuf/ReceiveBuf. Для пересылки смешанных данных - "приводи их к одному формату". Отправляешь сначала идентификатор пакета (думаю значения в 1 байт достаточно). либо текст, либо рекорд. если текст, то после идентификатора отправляешь длину сообщения. Если рекорд, то сразу данные. При получении смотришь идентификатор пакета, если рекорд, то принимаешь "буфер" по размеру рекорда. Если же текст, то получаешь длину строки, а потом саму строку. Все это делай через ReceiveBuf. Примерно так.
Грамотно поставленный вопрос содержит не менее 50% ответа. Грамотно поставленная речь вызывает уважение, а у некоторых даже зависть. |
#3
|
||||
|
||||
![]() хм а может проще было бы использовать SendText/ReceiveText
с определителем буду посылать по приходу определять куда мне мне это, packed record в строку и отправлять, и потом определять и сного в packed record перевести |
#4
|
||||
|
||||
![]() ни вопрос как перевести packed record в строку и обратно
|
#5
|
||||
|
||||
![]() Код:
type TRec = record i: Integer; s: String[10]; end; var rec: TRec; s: String; begin rec.i:=$40; rec.s:='hello'; SetLength(s, SizeOf(TRec)); CopyMemory(@s[1], @rec, SizeOf(TRec)); rec.i:=$0; rec.s:=''; CopyMemory(@rec, @s[1], SizeOf(TRec)); Memo1.Lines.Add(IntToStr(rec.i)); Memo1.Lines.Add(rec.s); end; Пишу программы за еду. __________________ |
#6
|
||||
|
||||
![]() "хотя и не понятно зачем так делать?"
ну я же SendText/ReceiveText решил использовать... |