高手们, 为什么我在IDTCPClient/IDTCPServer控件中以内存流的方式传送一个数据时总是接收时出现错误,而我用同样的方法用在IDUDPClient/IDUDPServer控件上却不会报错,传输都是正确的!!有哪位老大有IDTCPClient/IDTCPServer以内存流传输数据的实例麻烦给一个好吗?谢谢了!
E_Mail: [email protected]
[email protected]
E_Mail: [email protected]
[email protected]
发送:
IdTCPClient1.OpenWriteBuffer;
IdTCPClient1.WriteStream(AStream);
IdTCPClient1.CloseWriteBuffer;接收:
ReadStream...
-----------------------发送代码--------------------------------
var
SendStr: String;
AStream := TMemoryStream;
begin
SendStr := 'asdfasdf';
AStream := TMemoryStream.Create;
AStream.Clear;
AStream.Write(SendStr,SizeOf(SendStr));
IdTCPClient1.OpenWriteBuffer;
IdTCPClient1.WriteStream(AStream);
IdTCPClient1.CloseWriteBuffer;
---------------------------------------------------------------
------------------------接收代码------------------------------
var
SendStr: String;
AStream := TMemoryStream;
begin
AStream := TMemoryStream.Create;
AStream.Clear;
TCPServer.AThread.Connect.ReadStream(AStream,-1,True);
AStream.Read(SendStr,Sizeof(SendStr);
--------------------------------------------------------
接收的时候是‘’空字符!正确的:var
SendStr: String[255]; <---------这里只需要修改成这样就一点错没有了!
begin
SendStr := 'asdfasdf';
AStream := TMemoryStream.Create;
AStream.Clear;
AStream.Write(SendStr,SizeOf(SendStr));
IdTCPClient1.OpenWriteBuffer;
IdTCPClient1.WriteStream(AStream);
IdTCPClient1.CloseWriteBuffer;
这个时候就完全正确了,但只能发送255个字符!!各位大侠,这到底是怎么回事呀???
AStream.Write(SendStr, Length(SendStr);试试
AStream.Write(SendStr, Length(SendStr);错了..
应该写成
AStream.Write(pchar(SendStr)^, Length(SendStr);最好跟一句
AStream.Position:=0;
AStream.Write(PChar(SendStr)^, Length(SendStr);
AThread.connection.ReadStream(str,-1,True)
var
Str: TMemoryStream;
begin
Str := TMemoryStream.Create;
Str.Clear;
AThread.connection.ReadStream(str,-1,True) <--每到这一句就挂起不往下执行了!!!!
AThread.connection.ReadStream(str,-1,True)
第三个参数名字叫AReadUntilDisconnect.......
仅看这变量名字应该可以明白很多,
除非对方断开连接,则表示数据没有读完,要等待一直读下去。