服务端 发送数据给 窄带客户端 设置 发送包大小5K 结果 客户端不能一次完整接受数据
 假设 客户端第一次接受了2K数据 
 请教 剩下的那3K数据还在服务端发送缓冲区里边吗?

解决方案 »

  1.   

    我说得就是 TCP 协议联机的情况下
      

  2.   

    实际中的问题是这样的for i=1 to winsock1.count
        winsock1(i).senddata dat
    next
       其中 winsock1(2) 连接的是窄带用户,其他用户都是宽带   那么这个循环 是不是受  winsock1(2) 的影响 整个变慢了??
       发送的数据的速率已经大于 这个窄带用户的带宽了
       如果数据量大 每秒有很多这个循环 那么整体性能速度 是不是全部受到了窄带客户的限制?高手指点谢谢
      

  3.   

    TCP通讯是异步的, 在发送方将数据送出后, 不能保证以下几点:
                                           ~~~~
    1. 接收方一定能收到
    2. 接收方一定能一次性全部收到
    3. 接收方一定能一次性只收到此次发送的数据所以, TCP通讯时发送/接收双方是必须制定通讯协议的, 也就是通讯数据包的格式, 这个格式规定了一个完整数据包是怎样开始和怎样结束的, 只有制定了通讯数据包的格式, 才有可能在异步方式下, 接收方能在某一次或者某几次的数据接收中, 分离出一个完整的数据包。也正是由于上述原因,所以TCP通讯的编程中,往往是接收方的代码要比发送方的代码复杂得多。相信只要楼主能按通讯协议来处理客户端接收到的数据,就不会担心"客户端不能一次完整接受数据"这个问题了。
      

  4.   

    谢谢楼上的 我的问题主要是
    for i=1 to winsock1.count
        winsock1(i).senddata dat
    next
       其中 winsock1(2) 连接的是窄带用户,其他用户都是宽带
       
       那么这个循环 是不是受  winsock1(2) 的影响 整个变慢了??
       发送的数据的速率已经大于 这个窄带用户的带宽了
       如果数据量大 每秒有很多这个循环 那么整体性能速度 是不是全部受到了窄带客户的限制?高手指点谢谢
      

  5.   

    TO:jadeluo(秀峰)
    TCP通讯时发送/接收双方是必须制定通讯协议的, 也就是通讯数据包的格式一般怎么来制定这个呢?
      

  6.   

    数据是应用层交给底层了,你在sendate后+doevents看看
      

  7.   

    不是
    剩下的数据将会触发第二个dataarrival事件
    如果第二个dataarrival事件后仍然不能接受完,将触发第三个,以此类推
      

  8.   

    错~TCP的话,数据对方一定会收到!
      

  9.   

    支持楼上的,UDP就不一定收到啦!
      

  10.   

    To  qyii(向范敬宜同志学习!) 错~TCP的话,数据对方一定会收到!废话!我的意思是,收到的数据会连续触发几个Data_Arrival事件(如果一次数据太多)
      

  11.   

    回复人: zyg0(影子(我可以很负责任地说:我已经真的很胖了) ( ) 信誉:97  2005-6-6 12:52:08  得分: 0  
     
     
       
    数据是应用层交给底层了,你在sendate后+doevents看看'''''''''''''''''''''''''''''
    同意这个,这么做了,其他的不是你操心的!那是是低层的事情。如果发送不成功那不是你的错!  
     
      

  12.   

    错~TCP的话,数据对方一定会收到!也不一定哦, 如果双方在建立了TCP连接之后, 一方因为突发事件(比如停电)导致与网络断开, 则另一方是不会马上知道的(一般需要20秒以上的时间才能检测出这个连接错误, 这种现象在两个网络间通讯时非常明显), 在这种情况下发送出去的数据对方是肯定收不到的。
      

  13.   

    如果数据过大
    那么winsock会丢掉大于他缓冲区的部分
    而不是触发第二个Data_Arrival事件
    sendate后+doevents
    我一直不明白doevents有什么作用那?
    把权利交给操作系统 这个我知道  但是具体会怎样那?》
      

  14.   

    w  sendate后+doevents
    我一直不明白doevents有什么作用那?
    把权利交给操作系统 这个我知道  但是具体会怎样那?》
                                    ~~~~~~~~~~~~~~~~~
                                     ~~~~~~~~~~~~~~~
    我顶!!!!
      

  15.   

    doevents作用是让前面接收到的数据处理完毕再处理后面的,否则可能产生冲突