我可以帮你解决,你问提说清楚点,要不发过来给我看看
[email protected]

解决方案 »

  1.   

    with ServerSocket.Socket do
                for i:=0 to ActiveConnections-1 do
                  Connections[i].SendBuf(pSendBuf^,nSendSize);
      

  2.   

    按照bsd的标准:[10053] Software caused connection abort。我认为你的client是不是连接的过于频繁所致。你说的不错errorcode :=0可以忽略错误,如果在for中加上延时,这样可能就可以解决。
    主机:for i:=0 to ActiveConnections-1 do 
    begin
       //在这延时1秒
       ………………
       Connections[i].SendBuf(pSendBuf^,nSendSize); 
    end;
    pSendBuf^ 是发送的实时数据包 大小为 3237byte 
      

  3.   

    procedure TFormGame.delay(delaylong : double);
    var
      startTime : double;
    begin
      StartTime := now;
      repeat
        Application.ProcessMessages;
      until Now > StartTime + delaylong * (1/24/60/60);
    end;加上   delay(1);
      

  4.   

    难在问题不好捕捉, 这种问题不是经常发生
    我想可能跟网络的流量有关,不知如何能够更好的来控制网络流量
    举个例子,在Client 连接 Server的时候 使具有最大优先权 使Server 放弃 Send Data To 
    其他机器,首先响应Client 的连接请求
    我想原因是否在某个机器Connect Server的时候 此时Server 正在 
    for i:=0 to ActiveConnections-1 do 
    Connections[i].SendBuf(pSendBuf^,nSendSize) 而导致此次连接不上 出现异常
    如果能屏蔽此错误也OK
      

  5.   

    用TWinSocketStream,可以控制超时
    另外,在open,send,recv,close各个过程都用try控制一下
    这是我的一点经验
      

  6.   

      Tserversocket 和 TClientsocket 我用过,但没有在正式项目中用,发现不是很好使,
    我比较喜欢用winsock,性能很好
      

  7.   

    to yimen:
    可否解释一下啊
      

  8.   

    我在Delphi5中遇到过,是用异常处理语句处理的。
    try
      ...
    exceptend;
      

  9.   

    you should use ip multicast
      

  10.   

    协议应该没问题,偶尔出现应该是由于网络状况引起的超时。原因可能有:客户登陆Server确认过程失败(TCP ACK);由于客户登陆引起服务器向其他机器发送数据超时(网络带宽或机器本身资源)。解决:1.用TCP协议,利用事件I/O模式,不用异步消息(BCB控件),可利用事件确认数据发送完毕;2.用UDP多播减轻带宽压力(理论上不保证数据顺利,但问题不大);3.将Socket发送和接受buffer置为0,避免内存操作。这些需要Socket API,如果用控件,可用同步阻塞式,开多线程,用WinSocketStream可保证数据已发,不用循环,其WaitForData不会增加系统太多开销。
    不能捕捉到错误,大概不能捕捉所有消息,例如不能捕捉侦听Socket的
      

  11.   

    To Riva and solar :
    能否举个例子看看,我对Socket 不是很熟悉,Thanks
      

  12.   

    改用VC,Delphi就是不好用!哈哈哈哈!
      

  13.   

    修改SOCKET的PAS文件,将SENDBUF和CMSOCKETMESSAGE中的错误提示注释掉即可。
      

  14.   

    yyping() ,错误可以避免吗?忽略可以吗?
      

  15.   

    yyping:
    Thanks ,I Will Try 
      

  16.   

      我现在正在做这方面的程序,是否可以发给我一份呢!那个shocket 10053 应该是套接口在connect时出的错!有可能是端口被占用了~!
      

  17.   

    这是编程错误!
    for i:=0 to ActiveConnections-1 do 
    begin
      //在循环中,Connections变化了,有的断了,有的新连了
      //新联的无所谓,断了的就不行了,你会访问到无效的Socket。
      //错位会发生在循环的后面
      //可以忽略
      //另外,循环计数值是固定的,即使ActiveConnections变了,你也可以试试再发送前再判断(i和ActiveConnections比较),但我不知道这会不会被编译优化。或者看看有没有判断套节字有效的方法。试试吧!兄弟!
      try
        Connections[i].SendBuf(pSendBuf^,nSendSize); 
      except
        on E: exception do
           ...
      end;
      

  18.   

    同意RIVA的观点
    系统资源或性能最可能出类似问题,超时或连接失败,与软件关系不大
      

  19.   

    我纠正一下:
       Connections[i].SendBuf发生的异常你都是捕捉不到的,因为它们不是ServerSocket,他们是各自的Socket。所以即使这里发生了一般的拥塞,你也一样会弹出错误窗口。所以问题很简单,主要还是在于异常捕捉! 没那么玄!  try
        Connections[i].SendBuf(pSendBuf^,nSendSize); 
      except
        on E: exception do
          ...
      end;
      

  20.   

    把原程序发一下,否则不好找BUG
    [email protected]
      

  21.   

    msdncom:
    你是太不小心了,sql语句中where firsttname='" & firstname & "'"
    应该为where firstname='" & firstname & "'"!
      

  22.   

    楼上的各位兄弟,本人现在正在现场给用户调试,
    我首先要感谢yyping,他提出了最直接的解决办法,我按照他的方法,已经把问题给
    屏蔽掉了,OK,现在问题是解决了,但是原因还没有找到,我也考虑以上几位朋友的观点
    可能是数据量太大,发送的过程中某个连接丢失,引发异常
    我现在在网吧,周末可以回家,有什么问题大家可以留下联系方式!
    感谢yyping 的提示,及朋友们的参与
      

  23.   

    http://www.csdn.net/Expert/topic/511/511105.shtm
      

  24.   

    你的问题我也遇到过,后来我用 socket api 来做(阻塞方式)结果没有问题,我发现
    TClientSocket ,TServerSocket 有问题。你可以用 api 来做。
      

  25.   

    to xzh:
    好啊可否给出事例?