J
jrmd
Unregistered / Unconfirmed
GUEST, unregistred user!
我的程序是一个 C/S 架构的小程序,服务器端要定期通过 UDP 向客户端发送 10K 左右的数据,因为 Delphi 的 TNMUDP.SendBuffer() 每次只能发2K,多了发送操作就失败,所以我的算法是:将一次要发送的数据报分成多个帧,客户端接收到所有帧后再组合:// 帧是这样定义的:type PDataGramFrame = ^TDataGramFrame; TDataGramFrame = Record TotalLength: integer; // 数据报总长度 LengthOfCurFrame: integer; // 当前帧长度 IsLastFrame: Boolean; // 最后一帧? Data: array[0..SIZEOFPERFRAME-1] of char; // 数据区 end;//// 服务器端的发送算法://procedure TServerForm.Response(LocalUDP: TNMUDP; RemoteHostIP: string; RemotePort: integer);var DataGramFrame: TDataGramFrame; SendBytes: integer; LeftBytes: integer;begin//// 生成待发送数据//.................. LeftBytes := BmpStream.Size; // 待发送数据放在 BmpStream 中,这是个TMemoryStream BmpStream.Position := 0; while LeftBytes > 0 do begin if LeftBytes >= SIZEOFPERFRAME then // SIZEOFPERFRAME 是每一帧的数据区最大长度 begin SendBytes := SIZEOFPERFRAME; DataGramFrame.IsLastFrame := False; // 还有后继帧 end else begin SendBytes := LeftBytes; DataGramFrame.IsLastFrame := True; // 这是最后一帧,客户端收到这帧后就应组合 end; // 填充帧字段 DataGramFrame.TotalLength := BmpStream.Size; DataGramFrame.LengthOfCurFrame := SendBytes; try BmpStream.ReadBuffer( DataGramFrame.Data, SendBytes ); except on EReadError do exit; // 如果读不到 SendBytes 个字节就不再发送 end; LocalUDP.SendBuffer( DataGramFrame, sizeof( DataGramFrame ) ); LeftBytes := LeftBytes - SendBytes; end; // end while.........问题:TNMUDP.SendBuffer() 的第一个参数只接受一个 array of char,可我想传递的是一个结构变量,在 C 中,我可以直接取这个结构变量的地址,然后再发送出去。但 Delphi 中应该怎么做?刚刚从其它语言转到 Delphi,是个新手,请多多指教!