用INDY,with form1.IdTCPServer.Threads.LockList do
     try
       for i := 0 to Count-1 do
       begin
         TIdPeerThread(Items[I]).Connection.InputBuffer.Clear;
         TIdPeerThread(Items[I]).Connection.Disconnect;
         TIdPeerThread(Items[I]).Terminate;
       end;
       Clear;
     finally
       form1.IdTCPServer.Threads.UnlockList;
     end;
     form1.IdTCPServer.Active :=false;
   end
   当服务器端停止服务,当服务器不发送数据时候没问题,但是当发送数据时候,try
            for k :=0 to count - 1 do
            begin
              TidPeerThread(IdTcpServer.Threads.LockList.Items[k]).Connection.WriteBuffer(sbuf,j+1);
            end; 
          finally
              idtcpserver.Threads.unLockList;
          end;
  按停止就死掉了,怎么回事呢???

解决方案 »

  1.   

    count   是哪边的count都全部断开了那IdTcpServer.Threads.LockList.Items[k] 肯定会出错。这时候连接数量应为0
      

  2.   

    总要一个一个断的啊,现在问题是一旦服务器这边发数据给客户端(GPRS),他停止服务了,但是再次开启服务的时候,服务器这边就没办法监测到客户端了,停止服务就死了。不发送数据的时候不存在这个问题,停止,开启,停止,开启都很正常的亚?
      

  3.   

    没有必要用Indy之类的控件,自己用API写吧。。
    控件用多了,都不知道里面杂写的了。其实,写一次,第二次,你就可以直接用了。很方便!
      

  4.   

    我用这么长时间Indy都是没问题呀,好好检查你的代码吧。