我用的是Delphi自带的tserversocket/tclientsocket
当前有几个连接,我已把连接保存在数组中了,请问,如何向多个客户连接发送同一个内存数据流?
第一次发送时正确,但是当第二次发送时,就会报错,不知道什么原因,如果只发送一次,在释放内存流时也会报错,郁闷了,,代码如下 :
          critical.Enter;
           for k:=0 to maxc-1 do
              begin
                 cons[k].SendStream(tms);//当发送到第二个时会出错
                end;
          critical.leave;
         tms.free;//如果只发送一次,这里会出错。。

解决方案 »

  1.   

    在线帮助中这样写到Note: The Stream passed as a parameter to SendStream becomes "owned" by the windows socket object.  The Windows socket object frees the stream when it is finished with it.  Do not attempt to free the stream after it has been passed as a parameter.我想可能就是这个原因了:
    当前面那一个SendStream,还没有发送完,就去释放,就有可能会引起出错
      

  2.   

    我觉得要不使用一个临时的Stream来解决tmp_tms.CopyFrom(tms, tms.Size);
    cons[k].SendStream(tmp_tms);但这也不是根本解决,而且还多用了一份内存空间;根本解决办法,应该是等一个SendStream操作完成之后,再都进行下一步操作。
    但这样,是不是又会对效率上不满意,呵呵楼主要好好考虑一下