DELPHI盒子
!实时搜索: 盒子论坛 | 注册用户 | 修改信息 | 退出
检举帖 | 全文检索 | 关闭广告 | 捐赠
技术论坛
 用户名
 密  码
自动登陆(30天有效)
忘了密码
≡技术区≡
DELPHI技术
lazarus/fpc/Free Pascal
移动应用开发
Web应用开发
数据库专区
报表专区
网络通讯
开源项目
论坛精华贴
≡发布区≡
发布代码
发布控件
文档资料
经典工具
≡事务区≡
网站意见
盒子之家
招聘应聘
信息交换
论坛信息
最新加入: tkzcol
今日帖子: 9
在线用户: 32
导航: 论坛 -> 移动应用开发 斑竹:flyers,iamdream  
作者:
男 liu494021458 (eedc) ★☆☆☆☆ -
普通会员
2016/11/10 7:43:40
标题:
indy10 tcpserver 与tcpclient 发送的数据问题 浏览:1616
加入我的收藏
楼主: indy10 tcpserver 与tcpclient 发送的数据有的时候两个软件运行后能收发送数据
有的时候不能收发数据!经过抓包发现tcpserver正常发送数据!而tcpclinet接收数据不正常请大神指教!我把代码附 上:
   function Tform1.SendStreamToServer(Cmd:String): Boolean;
var
  MyStream: TMemoryStream;
  t,i:integer;
   List:TList;
begin

  try
    MyStream:=TMemoryStream.Create;
     cmd:= EncodeString(cmd);
    MyStream.Write(Cmd[1],Length(Cmd)* SizeOf(Char));
    MyStream.Position:=0;
    i:=MyStream.size;
    List:=idtcpserver1.contexts.locklist;
     for t:=0 to List.Count-1 do

         begin

          if tidcontext(List.items[t]).binding.Peerip = u then begin
          tidcontext(List.items[t]).Connection.IOHandler.LargeStream:=true;
      tidcontext(List.items[t]).Connection.IOHandler.WriteLn(IntToStr(MyStream.size));
    tidcontext(List.items[t]).Connection.IOHandler.Write (MyStream,i);


          end;

        end;

    Result := True;
  except
    //  IdTcpServer1.Contexts.UnLockList;
   // CurrentThread.Connection.Disconnect;
   // AContext.Terminate;
    MyStream.Free;
    Result := False;
  end;
    MyStream.Free;
end;

tcpclint代码:

procedure TClientHandleThread.Execute;
var
Thesize:Integer;
ThtStr:String;
RsltStream: TMemoryStream;
RDStrList,RootDStrList:TStringList;
begin
  while not Terminated do
  begin
   
      try
        ThtStr:=Form1.IdTCPClient1.IOHandler.ReadLn(IndyTextEncoding_UTF8);         
        Thesize:=Strtoint64def(ThtStr,0);
        if Thesize>0 then
          begin
          try
          RsltStream := TmemoryStream.Create;
          Form1.IdTCPClient1.IOHandler.LargeStream:=true;
          Form1.IdTCPClient1.IOHandler.ReadStream(RsltStream,Thesize);
          RsltStream.Position := 0;
          SetLength(CommandStr, RsltStream.Size);
          RsltStream.Read(CommandStr[1], RsltStream.Size);
          Form1.Label3.Text:=DecodeString(CommandStr);
          // CommandStr:=DecodeBase64(CommandStr);
          RsltStream.Free;

          Synchronize(HandleInput);
          Except
          
          Break;
          end;
          end;
     except
     end;
    end;
  //end;
end;
----------------------------------------------
-
作者:
男 lsz100 (lsz) ★☆☆☆☆ -
盒子活跃会员
2016/11/10 9:52:17
1楼: 服务端方法错了 服务端TCPSERVER有个事件Execute 只有这里接收和发送给客户端才是正确的方法 这里是多线程处理 不用你操心
----------------------------------------------
我为人人为我
作者:
男 liu494021458 (eedc) ★☆☆☆☆ -
普通会员
2016/11/10 11:11:21
2楼: tcpserver发送数据正常
----------------------------------------------
-
作者:
男 liu494021458 (eedc) ★☆☆☆☆ -
普通会员
2016/11/10 11:15:29
3楼: 我用Form1.Label3.Text:=DecodeString(CommandStr);读数据有时候正常,有时候不读数据!两个软件都重启的情况下有时候就连接上了!只要连接上都能发送,连接不上怎么发也发不过来,我觉得的住要出在连接这里,可我自己找不出毛病来!请大神帮忙
----------------------------------------------
-
作者:
男 hnxxcxg (咏南中间件) ★☆☆☆☆ -
盒子活跃会员
2016/11/10 17:12:58
4楼: http://www.cnblogs.com/hnxxcxg/category/837504.html
INDY10系列文章
----------------------------------------------
中间件QQ群: 92449782 博客: http://www.cnblogs.com/hnxxcxg/
作者:
男 liu494021458 (eedc) ★☆☆☆☆ -
普通会员
2016/11/11 7:48:07
5楼: 程序在android下第一次运行可以正常使用!如果退出软件,在运行软件那么就不会发送数据了!重启手机后在运行手机可以正常发送数据!
----------------------------------------------
-
作者:
男 wang_80919 (Flying Wang) ★☆☆☆☆ -
普通会员
2016/11/11 8:37:12
6楼: 楼主不听 1 楼的,活该。
----------------------------------------------
(C)(P)Flying Wang
信息
登陆以后才能回复
Copyright © 2CCC.Com 盒子论坛 v3.0.1 版权所有 页面执行70.3125毫秒 RSS