关于IdTCPServer1Execute接收数据的问题

Researcher 2010-10-03 09:50:50
我用indy10+D2007

发送方执行
IdTCPClient1.Socket.Write(RawToBytes(memStream.Memory^,memStream.Size));
memStream里面的数据绝对正确,我做了验证的

接收方
procedure TForm2.IdTCPServer1Execute(AContext: IdContext);
里面执行这一句
AContext.Connection.Socket.ReadStream(stream);
这里得到的stream.size始终=0,叫天天不应阿!
...全文
502 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
longshine 2010-10-26
  • 打赏
  • 举报
回复
我也学习一下,
bdmh 2010-10-12
  • 打赏
  • 举报
回复
注意检查 Stream的Position是否回0,否则传出去的就不对了
Henry.6 2010-10-12
  • 打赏
  • 举报
回复
学习,最近在学用indy
FOREST169 2010-10-05
  • 打赏
  • 举报
回复
没用过,学习学习。
喝口水 2010-10-03
  • 打赏
  • 举报
回复 1
给你做了个例子,你看一下

procedure TForm1.Button1Click(Sender: TObject); //连接按钮
begin
IdTCPClient1.Host:='127.0.0.1';
IdTCPClient1.Connect;
end;

procedure TForm1.IdTCPServer1Connect(AThread: TIdPeerThread);
begin
Memo1.Lines.Add('有用户连接');
end;

procedure TForm1.Button2Click(Sender: TObject); //发送按钮
var
sm:TStringStream;
msize:Integer;
begin
sm:=TStringStream.Create('大家好');
msize:=sm.Size;
Memo1.Lines.Add('发送时流大小为:'+inttostr(msize));
IdTCPClient1.WriteInteger(msize);
IdTCPClient1.WriteStream(sm);
sm.Free;
end;

procedure TForm1.IdTCPServer1Execute(AThread: TIdPeerThread);
var
s:string;
sm:TStringStream;
msize:integer;
begin
sm:=TStringStream.Create('');
msize:=AThread.Connection.ReadInteger();
Memo1.Lines.Add('接收到的大小为:'+inttostr(msize));
AThread.Connection.ReadStream(sm,msize);
Memo1.Lines.Add(sm.DataString);
sm.Free;
end;
SQLDebug_Fan 2010-10-03
  • 打赏
  • 举报
回复
IdTCPClient1.Socket.Write有专门发Stream的函数,另外是否Stream的Position置为0了。

1,593

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 网络通信/分布式开发
社区管理员
  • 网络通信/分布式开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧