讨论 winsock 常见以外情况和解决办法~ 服务端 发送数据给 窄带客户端 设置 发送包大小5K 结果 客户端不能一次完整接受数据 假设 客户端第一次接受了2K数据 请教 剩下的那3K数据还在服务端发送缓冲区里边吗? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 我说得就是 TCP 协议联机的情况下 实际中的问题是这样的for i=1 to winsock1.count winsock1(i).senddata datnext 其中 winsock1(2) 连接的是窄带用户,其他用户都是宽带 那么这个循环 是不是受 winsock1(2) 的影响 整个变慢了?? 发送的数据的速率已经大于 这个窄带用户的带宽了 如果数据量大 每秒有很多这个循环 那么整体性能速度 是不是全部受到了窄带客户的限制?高手指点谢谢 TCP通讯是异步的, 在发送方将数据送出后, 不能保证以下几点: ~~~~1. 接收方一定能收到2. 接收方一定能一次性全部收到3. 接收方一定能一次性只收到此次发送的数据所以, TCP通讯时发送/接收双方是必须制定通讯协议的, 也就是通讯数据包的格式, 这个格式规定了一个完整数据包是怎样开始和怎样结束的, 只有制定了通讯数据包的格式, 才有可能在异步方式下, 接收方能在某一次或者某几次的数据接收中, 分离出一个完整的数据包。也正是由于上述原因,所以TCP通讯的编程中,往往是接收方的代码要比发送方的代码复杂得多。相信只要楼主能按通讯协议来处理客户端接收到的数据,就不会担心"客户端不能一次完整接受数据"这个问题了。 谢谢楼上的 我的问题主要是for i=1 to winsock1.count winsock1(i).senddata datnext 其中 winsock1(2) 连接的是窄带用户,其他用户都是宽带 那么这个循环 是不是受 winsock1(2) 的影响 整个变慢了?? 发送的数据的速率已经大于 这个窄带用户的带宽了 如果数据量大 每秒有很多这个循环 那么整体性能速度 是不是全部受到了窄带客户的限制?高手指点谢谢 TO:jadeluo(秀峰)TCP通讯时发送/接收双方是必须制定通讯协议的, 也就是通讯数据包的格式一般怎么来制定这个呢? 数据是应用层交给底层了,你在sendate后+doevents看看 不是剩下的数据将会触发第二个dataarrival事件如果第二个dataarrival事件后仍然不能接受完,将触发第三个,以此类推 错~TCP的话,数据对方一定会收到! 支持楼上的,UDP就不一定收到啦! To qyii(向范敬宜同志学习!) 错~TCP的话,数据对方一定会收到!废话!我的意思是,收到的数据会连续触发几个Data_Arrival事件(如果一次数据太多) 回复人: zyg0(影子(我可以很负责任地说:我已经真的很胖了) ( ) 信誉:97 2005-6-6 12:52:08 得分: 0 数据是应用层交给底层了,你在sendate后+doevents看看'''''''''''''''''''''''''''''同意这个,这么做了,其他的不是你操心的!那是是低层的事情。如果发送不成功那不是你的错! 错~TCP的话,数据对方一定会收到!也不一定哦, 如果双方在建立了TCP连接之后, 一方因为突发事件(比如停电)导致与网络断开, 则另一方是不会马上知道的(一般需要20秒以上的时间才能检测出这个连接错误, 这种现象在两个网络间通讯时非常明显), 在这种情况下发送出去的数据对方是肯定收不到的。 如果数据过大那么winsock会丢掉大于他缓冲区的部分而不是触发第二个Data_Arrival事件sendate后+doevents我一直不明白doevents有什么作用那?把权利交给操作系统 这个我知道 但是具体会怎样那?》 w sendate后+doevents我一直不明白doevents有什么作用那?把权利交给操作系统 这个我知道 但是具体会怎样那?》 ~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~我顶!!!! doevents作用是让前面接收到的数据处理完毕再处理后面的,否则可能产生冲突 DataGrid 删除行 求本vb控件的chm电子书. 为什么LISTVIEW控件没XP风格 让人头痛万分的字体问题 为什么我用以下程序发短信,手机没有响应。?? 关与向sqlserver数据表中dataTime字段的写入的问题 vb中MSHFlexGrid控件排序 ado连接问题 ADO打包的问题 ★★急!如何降低、限制光驱转速!!★★ "堆栈空间溢出"是什么原因引起的,请各位指教一下小弟. 执行查询时取不到数据,结果发现表被锁,如何获得表被锁的信息并让该操作等待N秒?(Informix DB)
winsock1(i).senddata dat
next
其中 winsock1(2) 连接的是窄带用户,其他用户都是宽带 那么这个循环 是不是受 winsock1(2) 的影响 整个变慢了??
发送的数据的速率已经大于 这个窄带用户的带宽了
如果数据量大 每秒有很多这个循环 那么整体性能速度 是不是全部受到了窄带客户的限制?高手指点谢谢
~~~~
1. 接收方一定能收到
2. 接收方一定能一次性全部收到
3. 接收方一定能一次性只收到此次发送的数据所以, TCP通讯时发送/接收双方是必须制定通讯协议的, 也就是通讯数据包的格式, 这个格式规定了一个完整数据包是怎样开始和怎样结束的, 只有制定了通讯数据包的格式, 才有可能在异步方式下, 接收方能在某一次或者某几次的数据接收中, 分离出一个完整的数据包。也正是由于上述原因,所以TCP通讯的编程中,往往是接收方的代码要比发送方的代码复杂得多。相信只要楼主能按通讯协议来处理客户端接收到的数据,就不会担心"客户端不能一次完整接受数据"这个问题了。
for i=1 to winsock1.count
winsock1(i).senddata dat
next
其中 winsock1(2) 连接的是窄带用户,其他用户都是宽带
那么这个循环 是不是受 winsock1(2) 的影响 整个变慢了??
发送的数据的速率已经大于 这个窄带用户的带宽了
如果数据量大 每秒有很多这个循环 那么整体性能速度 是不是全部受到了窄带客户的限制?高手指点谢谢
TCP通讯时发送/接收双方是必须制定通讯协议的, 也就是通讯数据包的格式一般怎么来制定这个呢?
剩下的数据将会触发第二个dataarrival事件
如果第二个dataarrival事件后仍然不能接受完,将触发第三个,以此类推
数据是应用层交给底层了,你在sendate后+doevents看看'''''''''''''''''''''''''''''
同意这个,这么做了,其他的不是你操心的!那是是低层的事情。如果发送不成功那不是你的错!
那么winsock会丢掉大于他缓冲区的部分
而不是触发第二个Data_Arrival事件
sendate后+doevents
我一直不明白doevents有什么作用那?
把权利交给操作系统 这个我知道 但是具体会怎样那?》
我一直不明白doevents有什么作用那?
把权利交给操作系统 这个我知道 但是具体会怎样那?》
~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~
我顶!!!!