我也在做这方面的试验,你的问题也是我正在头疼的,我也还没有找到解决方法。
不过我还有一个补充问题:怎样在server端确认某一台client端?

解决方案 »

  1.   

    还不如用UDP协议,不要连接,就可以直接传送,
    这样就可以避免所有你提到的问题
    1。 验证Server/Client的开关。
       在UDP中,只要向本网段发,用x.y.z.255做目标地址,就可以。全网段都会收到。
       所以:
         Server端加一条初始命令和一条响应命令
           比如:[00]Hello!
                 [02]Still Alive!
         Client端加一条初始命令和一条响应命令
           比如:[01]I am Borning!
                 [03]Still Alive!
         其中无论谁先启动都向本网段发送初始命令,在运行中如果收到其他计算机发来的初始命令
    就将它的FromIP补到本地“存活机器”列表中,在向其发送相应命令。在运行中如果收到其他计算机发来的响应命令,就将它的FromIP补到本地“存活机器”列表中。
         如果此种服务是不紧密的,那么,服务器可以通过即时发送[00]Hello!来验证谁在;如果是紧密的,则双方补充一条[04]Goodbye!来使得对方将自己从“存活机器”中抹掉。
    2 因为UDP是非连接型的,所以理论上可以同时为无限多的客户服务。
         我曾用过UDP书写聊天程式,在同学60个线程x2台计算机的轰炸下照样工作(这里引用的是
    合法数据,也就是合乎内部协议,程序必须处理的)只是较慢。
    对,在大量数据报冲击下,会丢失数据(不是一次通讯的数据畸变,而是丢失n次)。所以,对每项独立任务要有验证,当某部分缺失,应该要求重发那部分,这要求你的语法中能指明重发的段。
    计算端口流量,当其过大时,对新的服务申请做出[xx]Busy!什么的回答。客户端收到Busy,则启动定时器再试,3次不过,就报告失败。这样如何?
    如有问题,可直接mailto:[email protected]
         
      

  2.   

    http://www.csdn.net/soft/openfile.asp?kind=1&id=9726
    下载一个试用。
      

  3.   

    Asynchronous socket error 10061
    可以捕获的!
    uses ScktComp;
         ~~~~~~~~~有个函数,SetErrorProc,注册你的异常处理函数,这样就不会有严重错误的对话框弹出。比如你自己的出错处理函数定义为:procedure MyErrorDealProc( ErrorCode: integer );
    begin
      case ErrorCode of 
        ....
      End;
    end;则在你的程序里面调用注册:
      SetErrorProc( MyErrorDealProc );OK!