|
#1
|
||||
|
||||
получение пакета
как в сокете при получении пакета Buf считать не определенный размер, а весь пришедший пакет
|
#2
|
|||
|
|||
вот так получишь все данные в Buf, если они не превышают 32 кб, что думаю у тебя никогда не произойдет.
Код:
var Buf: array[0..32767] of char; begin Socket.ReceiveBuf(Buf, Socket.ReceiveLength); end; Код:
for i:=1 to Socket.ReceiveLength div SizeOf(TSendStruct) P.S.: если с 9ти утра будешь в аське, помогу, потом времени не будет. P.S.2: или вообще сделать динамический массив char'ов и устанавливать ему размер от 0 до Socket.ReceiveLength (в нем и будут все твои данные которые пришли в текущий момент) взялся из неоткуда, ничего не прошу, помогаю просто так ICQ: 593977748 - стучать в случае КРАЙНЕЙ необходимости, ну, или если вы со Ставрополя Последний раз редактировалось Assistant, 23.03.2011 в 00:51. |
#3
|
||||
|
||||
эм имеешь ввиду куда выделять?
|
#4
|
||||
|
||||
вариант 1:
Код:
procedure TForm1.ServerSocket1ClientRead(Sender: TObject; Socket: TCustomWinSocket); var len: Integer; buf: array of Char; i: Integer; begin len:=Socket.ReceiveLength; SetLength(buf, len); Socket.ReceiveBuf(buf[0], len); for i:=0 to len-1 do begin // buf[i] end; end; Код:
procedure TForm1.ServerSocket1ClientRead(Sender: TObject; Socket: TCustomWinSocket); var len: Integer; buf: PChar; begin len:=Socket.ReceiveLength; buf:=GetMemory(len); try Socket.ReceiveBuf(buf^, len); // Memo1.Lines.Add(Copy(buf, 1, len)); finally FreeMemory(buf); end; end; Пишу программы за еду. __________________ |
#5
|
||||
|
||||
спасибо,
но вот проблема Код:
var pacet: TSendStruct; begin ... ... pacet:=Copy(buf, 1, Socket.ReceiveLength); где TSendStruct = packed record как быть [Error] Main.pas(389): Incompatible types: 'TSendStruct' and 'String' |
#6
|
|||
|
|||
та ёп, яж те говорил, через TMemoryStream делай, читай в него кусок который нужен и потом через .Write пиши в структуру
взялся из неоткуда, ничего не прошу, помогаю просто так ICQ: 593977748 - стучать в случае КРАЙНЕЙ необходимости, ну, или если вы со Ставрополя |
#7
|
||||
|
||||
Код:
var pacet: TSendStruct; ms: TMemoryStream; kom: string; begin Socket.ReceiveBuf(buf^, Socket.ReceiveLength); kom:=Copy(buf, 1, Socket.ReceiveLength); ms.Read(kom[1], Length(kom)); ms.Write(pacet, Length(kom)); |
#8
|
|||
|
|||
не советую читать в string, т.к. он может извратить некоторые байты не читаемые.
взялся из неоткуда, ничего не прошу, помогаю просто так ICQ: 593977748 - стучать в случае КРАЙНЕЙ необходимости, ну, или если вы со Ставрополя |