我目前正在尝试使用 Indy 在 TCP 之上编写自定义更高级别的协议。本质上,我想通过(使用流)发送一条记录,但这条记录可以表明要遵循的 x 字节将是一个图像文件。
因此,当服务器接收到记录时,如果它的内容表明它后面有图像,则需要将记录和图像数据分开。
var
Segment: TDPPSegment;
Segment2: TDPPSegment;
Buffer: TIdBytes;
Buffer2: TIdBytes;
Mem: TMemoryStream;
begin
if (Client.Connected) then begin
Segment.NameStr := 'Adrian';
Segment2.NameStr := 'Jon';
Mem := TMemoryStream.Create;
Mem.Write(Segment, SizeOf(Segment));
Mem.Write(Segment2, SizeOf(Segment2));
//The Size of the stream is 8 bytes here!
Client.IOHandler.Write(Mem, 0, False);
结尾;
为了模拟“图像文件”,我只想连续发送两条记录;这就是目标。请注意,我一次发送整个内存流(!),而不是逐条记录。但有趣的是,服务器运行了两次 OnExecute 事件!
var
Buffer: TIdBytes;
Segment: TDPPSegment;
Mem: TMemoryStream;
begin
Mem := TMemoryStream.Create;
AContext.Connection.IOHandler.ReadStream(Mem, SizeOf(TDPPSegment), False);
//Incoming stream size is FOUR bytes but TWICE!
Mem.Position := 0;
Mem.Read(Segment, SizeOf(TDPPSegment));
Showmessage(Segment.NameStr);
我希望它执行一次,所以将来我可以先读取标题记录(已知大小),然后查看要遵循的内容/是否有任何内容并采取相应的行动..
帮助将不胜感激!
感谢阅读,阿德里安