我在服务器端用:    TListClient=class(Tobject)
    DNS,
    Name      :String;
    Listlink  :Integer;
    Thread    :Pointer;
.............保存客户端信息,但是在客户端非法关闭的时候,服务器没有自动刷新列表,我还写了一个刷新列表的函数,但是每次非法退出时都要手动刷新才行,如果不刷新下次列表信息就有问题了。难道非要定时检测吗?不知各位有什么好方法介绍一下,谢谢。再问一下,用IDTCPServer和IDTCPClient数据传输,传输入接收的数据大小多少是最合适的,太大了会不会有数据丢失的现像!

解决方案 »

  1.   

    没问题
    TCP的多大不是一样,只是网络不稳定的就容易断线http://lysoft.7u7.net
      

  2.   

    现在有一个问题,客户端登录更新TListClient时和断线更新TListClient时如果刚好在同一时间就会有问题,不知道 有什么办法,有把两块更新合到一个主线程里还是不行。不知道哪位有好方法介绍一下,分不够我可以再加,最主要帮忙顶顶,有点人气,要不我都没信心在上面问了。
      

  3.   

    http://dev.21tx.com/2004/03/16/10240.html
    <用Indy组件开发Socket应用程序>
    为什么我就没有编译通过,为什么???
      

  4.   

    顶一下。我有一编关于这样的贴子。就在CSDN中,请搜索一下。
      

  5.   

    现在有一个问题,客户端登录更新TListClient时和断线更新TListClient时如果刚好在同一时间就会有问题,不知道 有什么办法,有把两块更新合到一个主线程里还是不行。不知道哪位有好方法介绍一下,分不够我可以再加,最主要帮忙顶顶,有点人气,要不我都没信心在上面问了。..........................................................................................
    难道真的没有会吗?我想不可能吧,你们在处理在线列表时怎么处理的呢?热心的朋友帮帮忙吧!
      

  6.   

    哎,热心的同志们跑哪去了呀,难道delhpi不行了吗,没办法了浪费我的分,哎,明天结贴吧!
      

  7.   


    用LockList来保证线程安全
      List := tcpServer.Threads.LockList;
      try
        for  i := 0 to ListClient.count-1 do
          exists := false;
          for Count := 0 to List.Count -1 do
            if Pointer(List.Items[Count])=listClient[i].pointer then
              exists := true;
          if not exists then listClient.remove(i);
      except
        TIdPeerThread(List.Items[Count]).Stop;
      end;
      finally
        tcpServer.Threads.UnlockList;
      end;