【发布时间】:2012-04-12 18:07:08
【问题描述】:
通过 Indy 发送 TMemoryStream 的最佳方式是什么?
目前我正在尝试:
procedure TClientForm.IdTCPClient1Connected(Sender: TObject);
begin
IdTCPClient1.IOHandler.Write(KStore.Size);
KStore.Position := 0;
IdTCPClient1.IOHandler.Write(KStore);
Memo1.Lines.Add('Client connected with server');
end
在服务器端:
function MemoryStreamToString(M: TMemoryStream): string;
begin
SetString(Result, PChar(M.Memory), M.Size div SizeOf(Char));
end;
procedure TClientForm.IdTCPServer1Connect(AContext: TIdContext);
var
LStore: TMemoryStream;
Size: Int64;
LStore := TMemoryStream.Create;
LStore.Position := 0;
Size := AContext.Connection.IOHandler.ReadInt64();
AContext.Connection.IOHandler.ReadStream(LStore,Size);
end;
但尽管没有错误,但在另一端使用该内存流到字符串函数只会返回 ??????????????????????在我保存到的文本文件中。
【问题讨论】:
-
最好的发送方式,是以HTTP服务器期望的方式发送。服务器如何期望它?
-
?抱歉,我不完全确定您的意思。
-
服务器期望如何接收流数据?我的意思是,服务器是否需要 POST 或 GET 方法?在特殊的参数或字段名称中?
-
整个(尝试的)服务器都存在问题。
-
服务器正在将数据读入 LStore,但之后 LStore 超出范围。
标签: delphi delphi-xe2 indy memorystream