对方发送数据的方法是封装在一个DLL中,发送的数据是通过tclientsocket发送的;
现在要在D7中用TIDTCPserver来接收数据
在tidtcpserver.onexevute中接收数据时,使用:
var
 recedata:string;
  recedata:=athread.connection.readln();
无法接收数据........用:
var
  recebuffer:array [0..255] of byte;
  recelen:integer;fillchar(recebuffer,256,#0);
recelen:=256;
recelen:=athread.Connection.Socket.Recv(recebuffer,recelen);//无法接收数据。。且出现了死循环 -_-#倒底如何接收数据?

解决方案 »

  1.   

    with AThread.Connection do
    begin
      readbuffer(.......);
      or
      readln(.....);
    end;
      

  2.   

    TIDTCPserver 是阻塞的,只有收到指定个数的数据程序才返回,
      

  3.   

    hongqi162 :
     月亮兄,不知道您有没有测试呢?我试过了,不行。 -_-!!disikj(人大代表):这个我倒没有仔细看,但如果真是这样,那可不妙啊。
    难道说,INDY组件中的TIdTcpServer,TIdTcpClient只能配对使用?!我不这么认为,但却始终没有找到数据接收的方法。哎,,,明天再抽时间测试下吧。
      

  4.   

    哎,看了很多资料,才知道,
    可以用这个来接收数据:
    var
     tempbuff:string; ...
     tempbuff:=indytcpserver.connection.readcurrentbuff;//方法名可以不对,记不清了。是可以接收到数据的,但是问题较为严重:
    1、并不是每次客户端发数据,服务端就触发接收事件,这个令人很头痛!
    2、就算是有接收事件触发,但接收的数据内容却是不正确的!这也令人头痛!附:我的控件并没有设置其他什么属性,只是设置了端口号,然后就开始监听。不知道是不是有什么属性要设置呢?基于上面两点问量,基本放弃了这样接收数据。经过网络查询,从大侠处才知道:原来TINDYTCPSERVER只提供流操作服务,没有同步操作功能,看来,无法这样来实现通讯了。