读书人

小弟我用IdTCPServer和IdTCpclient通讯

发布时间: 2012-09-10 22:20:12 作者: rapoo

我用IdTCPServer和IdTCpclient通讯的时候提示:Missing data provider or data packet
我用IdTCPServer和IdTCpclient通讯的时候,我用的是WriteStream,数据的传送是使用ClientDataSet来传送的,我服务器端把数据是传送到客户端了,但是在客户端读取数据的时候,提示:Missing data provider or data packet,有哪些大侠可以帮忙解决一下了?以下是代码

server端
AdoQuery := TAdoQuery.Create(nil);
AdoQuery.ConnectionString := Gs_ConnectString;
AdoQuery.SQL.Text := ls_str;
AdoQuery.Open;
DataSetProvider := TDataSetProvider.Create(Nil);
ClientDataSet := TClientDataSet.Create(Nil);
DataSetProvider.DataSet := ADOQuery;
ClientDataSet.Data := DataSetProvider.Data;
AStream:=TstringStream.Create( ' ');
ClientDataSet.SaveToStream(AStream,dfxml);
AStream.Position:=0;
AThread.Connection.OpenWriteBuffer;
AThread.Connection.WriteStream(AStream);
AThread.Connection.CloseWriteBuffer;

client端
AStream :=TStringStream.Create('');
IdTCPClient1.ReadStream(AStream, -1, True);
AStream.Position:=0;
ClientDataSet1:=TClientDataSet.Create(nil);
ClientDataSet1.LoadFromStream(AStream); // 每次在这个地方都会提示Missing data provider or data packet
if ClientDataSet1.RecordCount <> 0 then
begin
for li_i:=0 to ClientDataSet1.RecordCount-1 do
begin
Memo2.Clear;
for li_j:=0 to ClientDataSet1.FieldCount-1 do
Memo2.Lines.Add(ClientDataSet1.Fields[li_j].AsString );
ClientDataSet1.Next;
end;
end;

[解决办法]
可能是读取到AStream 不正确,有可能AStream是空的.
先试一下发送简单的字符串有没有问题.

读书人网 >.NET

热点推荐