with AThread.Connection do
begin
  ......
  writeln('aaa');
  writeln('bbb');
end;
这样使不会有问题的,仔细检查一下是不是你中间处理的过程除了问题,还是连接已经断开了...

解决方案 »

  1.   

    检查过了,中间没有问题的!
            read_str:=Readln();
            logging(file_log,'读取到'+read_str);
            for i:=0 to 30 do
               ret_k[i]:='';
            str_dis(read_str,ret_k,'|||');
            db97.StartTransaction;
            flag:=ret_k[0];                        //标识位
          if flag='authen' then
             begin
               sendstr:='authen|||客户端认证|||31|||000=1|||003=0|||004=认证通过|||';
               WriteLn(sendstr);
               goto 10;
               logging(file_log,'send authen');
    比如这段代码,日志里显示已经收到read_str,但是sendstr的确没有发出去!偶觉得好没有理由的!
    测试过几次,只有程序启动后第一次Writeln才会起作用!
      

  2.   

    writeln应该不会有问题,问题可能处在readln上,block了吧
    你把那个readtimeout设成2000或者别的试试是不是
      

  3.   

    readtimeout哪设置哪?可是为什么第一次却可以发出去呐?客户端的确收到了呐?
      

  4.   

    跟踪Indy内部代码吧
    Indy是有点小问题,但还不至于WriteLN只能用一次的
    一定是你的Code有问题的http://lysoft.7u7.net
      

  5.   

    是的!~偶也觉得一定是代码的问题!~但是问题出在哪儿呢?
    我做的是一个短连接,第一个连接接受两个包,第一个用来确认是否联接,客户端收到我的确认消息后会紧接着发实际要处理的包,我会再回一个确认包的!但是只有第一个包会返回确认消息,也就是Writeln,下面客户端的消息我可以受到,但是程序不做Writeln就disconnnect了!当然,从第2个连接开始我只会收到一个包!~暴郁闷!~是缓冲区的问题?还是………………
    看该贴第三楼的代码,str_dis只是一个处理函数,没影响的!~短短几行,没理由跳出Writeln语句的啊!
      

  6.   

    欢迎加入Borland DELPHI女程序员,参与群里技术讨论!欢迎女孩子,也欢迎男孩子参与技术讨论!群号15154361
      

  7.   

    以前好像也遇到这种情况
    不过用的是TCPSERVER TCPCLIENT
    每次发送、接收后如果执行断开、重新连接就可以解决
    土办法 朋友可以试试