with frmClient do
    begin
        while not Terminated do       //在子线程中执行,所以加此判断
        begin
            if TCPClient.Connected = true then
            begin
                cmd := 'COMMANDCLOSEQQ';
                try
                    strData := TCPClient.ReadLn;
                    Sleep(300);
                except
                on e:exception do
                begin                   
                    //ShowMessage(e.Message);
                    if TCPClient.Connected = false then
                        TCPClient.Connect;
                end;
                end;
end;
当执行到strData := TCPClient.ReadLn这句时报错,调试发现连接已断开,且线程Terminate
请求达人帮助

解决方案 »

  1.   

    TCPClient.ReadLn读取数据不成功,可能是server那一端,已经断开了TCP连接了,所以,你应该检查一下server那一端
      

  2.   

    那是因为你异常处理里面加了
    if TCPClient.Connected = false then
                            TCPClient.Connect;
    又把它连接上了
      

  3.   

    先回答楼上的:
      我加if TCPClient.Connected = false then
                            TCPClient.Connect;
    这句就是因为在执行readln断开了,才后来加上的。TO:do2008
       不太可能是Server端断开了,我上面一句有判断是否连接啊。而且就算刚连接上去就发送的话也不行。
    可能问题我没想清楚,请说的详细点。。
      

  4.   

    一般来说 TCPClient.ReadLn报错,即读取数据失败,那最大的可能就是TCP连接已经判断了建议你这样调试,1.在开发环境中运行你的服务器端,然后在接收IDTCPClient连接,并发送数据到IDTCPClient的这些代码的地方下断点,2.运行客户端,向服务器连接,并接收服务器返回的数据按上面这样的测试后,看是什么样的情况