非阻塞模式下发送超大数据连续触发read事件中数据读取问题? (100分)

  • 主题发起人 主题发起人 zheng
  • 开始时间 开始时间
Z

zheng

Unregistered / Unconfirmed
GUEST, unregistred user!
请看http://www.delphibbs.com/delphibbs/DispQ.asp?LID=2249230
 
小弟不才,有几点疑问:
Count := StrToInt(Copy(Len, 1, 4); //取得传送过来的整个字符串的长度,被插在流的最前面。这一句可能有问题吧,语法也不通的,因为Len是整型。

一般而言,你说的这种情况是通过判断发送“结束符”来判断的,很少有通过长度来判断的,比如http协议的命令的结束是发送一个空行,建议你也通过此方法来尝试。或者发送eof。
 
==>Count := StrToInt(Copy(Buf, 1, 4));
这里的buf应该是str吧? 不过即使你用str也不可能达到你的目的,strtoint(copy(str, 1, 4))最大只有9999,呵呵,你想传送的是80k......
改动一下:
Count = PInteger(Integer(str))^; 即把str字符串的前四个字节作为一个Integer类型。
不过你插入时可不能用IntToStr啊。而是用类似PInteger(Integer(str))^ := Count这类语句赋值。

另外你的代码还有问题:
1.buf是怎么定义的? array [0..n] of char?
如果不是,那么第一句就是错的。
如果是,那么第二句又有问题了。str+buf会在遇到buf中第一个#0时停止,你的str就可能不全了。特别是如果你照上面的建议修改的话,则肯定会漏掉数据,因为第一个包的前4个字节中必有#0,除非你发送的数据>255M
 
谁有 WinSock 的使用说明书
MSDN 也不详细
 
in fact you can use sendfile
 
后退
顶部