类似服务器端向客户端发送如下信息
  athread.Connection.WriteLn('正在连接...');
  athread.Connection.WriteLn('正在验证登陆名...');
  athread.Connection.WriteLn('你的名字原来是:');

解决方案 »

  1.   

    我就是用tcpclent.readln,我想问的是当服务器端没有向客户端发送消息时,客户端tcpclent.readln就会死机,请问如何进行以下判断?
      

  2.   

    indy为了简单,用了阻塞式socket只能用一个线程一直readln读到了数据就调主线程的过程。别无它法
      

  3.   

    同意楼上的看法,当然我对indy 一系列的组件不是很熟,我在开发一个C/S模式的程序时候,就是用TIME事件一直侦听  就是读 readln  
       当然我在这读的过程中,如果readln读的为空是容易出错,当你把readln读的内容付给一个变量的时候,就可以解决了。
          虽然上面的那个问题解决了,可是 我这个程序在局域网上调试很好,可是一放到internet网上就容易在传送的过程中丢失数据包,如果很不稳定,不知道有谁见过类似的问题,你们有是怎么解决的,我很想和你们一起探讨。
      

  4.   

    楼上的:你说的问题,我也是刚刚碰见过,以前少量的数据时没有问题,现在数据多了,就很容易丢失数据,我现在是在每条数据的尾巴上加一个校验位,接收方根据校验位判断数 据是否正确,错了,就返回消息告诉服务器端重新传送一次,就是传输速度很慢
    我用delphi做客户端没有问题(不会丢包,与VC通信会)
    我想知道大家还有什么更好的方法了,如果采用校验的话,服务器端就得发送一条数据,等待客户端返回确认信息,再发送下一条数据,速度很慢的
      

  5.   

    ----------------------------
    我就是用tcpclent.readln,我想问的是当服务器端没有向客户端发送消息时,客户端-tcpclent.readln就会死机,请问如何进行以下判断?
    -----------------------------
    不太明白你的意思,
    INDY控件服务器采用的是多线程÷租塞式的。每个客户端的IDTCPCLIENT对应服务器端的一个线程。
    你可以设置IDTCPCLIENT的相应时间啊。过了时间就放弃啊。
      

  6.   

    很简单的
    定时调用ReadFromStack(false, 10, false)了,返回>0就有数据可读Indy确实问题不少,但我的LYFTP是基于Indy的,为了这我对Indy作了大量的修改哦/ by LY http://lysoft.7u7.net http://liuyang.7i24.com http://lysoft.91i.net
      

  7.   


        最简单的就是资料看看阻塞与非阻塞的区别是什么?
        这个不是 INDY 的问题,这是阻塞机制的问题
      

  8.   

    我从不用readln,一直用readbuffer真要readln的话,就直接
    while Pos(#13#10,pchar(tcpclient1.InputBuffer.Memory)) <= 0 do
     tcpclient1.readfromstack;...