急!! 100分求winsocket传送20K左右二进制数据方法

hugeant 2001-06-01 03:13:00
客户端每隔一段时间(3-5秒)请求服务器端传送20K左右的二进制数据(其实是一个大的record类型结构),原来用的是Delphi5自带的TNMStrm(Fast net中),由于传输用的是Modem,带宽很窄,当另外一个程序也通过Modem请求大量数据时,会造成TNMStrm的Postit死锁,程序死翘翘,TNMStrm不带源码,也不好判断原因,看来只能自己用TCustwinsocket写了,各位大侠高手能给个类似的例子吗? 最好有注解的.

不好意思,只能给这么多分了 :(

大蚂蚁
hugeant@cn99.com
...全文
133 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
hugeant 2001-06-03
  • 打赏
  • 举报
回复
谢谢AutoAsm(),我现在才知道为什么用Modem一连接就是33.6K :(
看来我只有减小数据量了,或者分3次发送, 每次发送带个数据头.
谁有Fastnet的源码? 就是Delphi自己带的那个控件组的???? 我只想查一下TNMStrm的源码

hugeant 2001-06-02
  • 打赏
  • 举报
回复
我再顶... 顶啊顶....

有大侠吗?
hugeant 2001-06-02
  • 打赏
  • 举报
回复
我顶...
尘小陌 2001-06-02
  • 打赏
  • 举报
回复
哈哈哈,我们这边现在都是宽带了呀
AutoAsm 2001-06-02
  • 打赏
  • 举报
回复
to :hugeant(大蚂蚁) 
当使用56K的猫作为连接的一端,而另一端是数字连接的时候,因为只需要做1次A/D转换,所以可以达到56K,要不所有的猫都是虚假广告了。
如果连接的双方都使用猫的话,则只有33K,你可以看一下网络方面的书嘛
clacklin 2001-06-02
  • 打赏
  • 举报
回复
你是外部条件限死了,我是没办法了,猫太慢,数据量又多,如果是在局域网里就好办了。不是我们不想帮你!
hugeant 2001-06-02
  • 打赏
  • 举报
回复
继续定..

为什么没人回答我的问题啊?
hugeant 2001-06-01
  • 打赏
  • 举报
回复
对了,现在只能给34分,其它的过一段时间再给,好吗? 大家不会怎么小气吧 :)

大蚂蚁
hugeant@cn99.com
hugeant 2001-06-01
  • 打赏
  • 举报
回复
大家帮帮我呀 :(
hugeant 2001-06-01
  • 打赏
  • 举报
回复
To : AutoAsm() : Modem是带硬件硬件压缩的,20K数据的一个结构,用TNMStrm只发了1秒多一点,而这时由于线路或者交换机的原因,Modem的连接速度只有33.6K.

To: Musicwind : 我现在发送数据时用的是Fastnet控件板上的TNMStrm 和 TNMStrmServ,
发送流数据的,可以一次发很大的数据
To: Red_stone0(pei) : 我现在是用一对TClientSocket和TServerSocket来协调发送,
首先TClientSocket连接TServerSocket端,然后TClientSocket发送命令'GetAll',
TServerSocket收到该命令后,在OnClientRead中将结构数据写入临时流变量中,再调
用TNMStrm的PostIt(aStream : TStream)方法发送数据
客户端的TNMStrmServ在接受到数据后,设置gGetData : Boolean,
TClientSocket在检查到该标志后才延时发送下一个读数命令

To 大家: 大家给出个主意吧,最好能有源码,谢谢了


red_stone0 2001-06-01
  • 打赏
  • 举报
回复
能不能在客户端收完数据后再打开定时器,这样服务器上就不会出现旧数据还没发完,新数据又来了,引起阻塞。
copy_paste 2001-06-01
  • 打赏
  • 举报
回复
我来关注:)
musicwind 2001-06-01
  • 打赏
  • 举报
回复
打错了:
由于Windows的WinSocket堆栈大小的限制,每次发送数据超过
4k 容易 发生数据包叠加的现象,所以建议你分成几次发送,每次发<4k字节。
musicwind 2001-06-01
  • 打赏
  • 举报
回复
一点建议:
由于Windows的WinSocket堆栈大小的限制,每次发送数据超过
4k同意发生数据包叠加的现象,所以建议你分成几次发送,每次发<4k字节。
AutoAsm 2001-06-01
  • 打赏
  • 举报
回复
MODEM理论极限是56Kbps,也就是说只有7K字节。而你要求每秒最多要7K,不可能实现的。
另外,将数据包拆成1-2K一个的也许要好一些。
我没实验过,不过以前在看师兄的一篇硕士毕业论文好象讲到过

5,930

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧