在包的源文件中有这样一句话:
const
ReadBufferSize = 5000; // max to read at a time using Recv() or write
我把这个常量改大不会有什么副作用吧?
const
ReadBufferSize = 5000; // max to read at a time using Recv() or write
我把这个常量改大不会有什么副作用吧?
解决方案 »
- delphi 图片复制
- 怎么ADOQuery有这个错误?
- 跪求目录同步源码~
- delphi的db数据库路径设置
- 各位大哥,为何我在d6中安装地intraweb5.0.37开发地web程序最终转成isapi时总是报错?
- 有两台计算机,怎样在客户机上取得服务器上sqlserver的数据???
- 极菜的问题:dephi6中编写代码时如何实现自动缩近?
- 各位大侠,谁知道用delphi5.0的安装工具如何安装长文件名文件!
- TWebBrowser控件如何自动执行所载入页面中的JaVa函数?求救!
- ?各位高手请救救小弟!!如何用不同颜色填充由三个不同半径同心圆8等分形成的24块断面(tjw)
- 数据的类型???
- ★★★快来抢100分★★★:<<delphi5开发人员指南程序>>第11章delsrch.dpr源程序有错,在delphi6里不能运行,delphi5里也不能运行, why?
如果是tcp,必须要检查send函数的返回值。如果什么网站服务器做成不检查send返回值的那肯定是个大bug,跟接收者无关。发送缓冲区再大,也可能有缓冲区满而“丢包”的情况。另外,接受者也应该判断接收缓冲区是否都取出来了,是否有丢弃的数据。
to ybudi(菜牛):如果我的从缓冲区取数据的线程跟不上数据到来的速度(太猛了),是不是会出现丢数据的情况?现在的情况看起来就是这样,毕竟是100个线程分时工作,还有一些界面更新显示动作。
我现在想这样解决:建立socket后,把接收缓冲区用setsockopt设置成128K,这样,即使我来不及调用recv,仍然有128K的内部缓冲,对一般的网页足够了,请问大家是否可行。
如果根本没有什么阻塞的操作,开的线程越多越不好。
优化你的算法吧。网站那边发现缓冲区不够不会关闭连接的,除非发生错误。肯定是你的client发现缓冲区溢出造成的错误。不过一般也不会发生这种情况,缓冲区满了也没关系,服务器端就等什么时候取出来就再次发送TCP是个稳定的协议。我想你是做个netants那样的东西吧。所有网络操作放到一个线程里就够了,用非阻塞socket,不可能有数据来不及取出的情况。128K缓冲太大了,系统的8k其实足够。甚至你可以用overlapped i/o,设置系统的缓冲区为0,速度更快