谁知道这是什么原因!TServerSocket取不全数据???(200分)

  • 主题发起人 主题发起人 only you
  • 开始时间 开始时间
O

only you

Unregistered / Unconfirmed
GUEST, unregistred user!
ServerSocket1: TServerSocket;
.....................
procedure TNetService.ServerSocket1ClientRead(Sender: TObject;
Socket: TCustomWinSocket);
//由于传输8k的限制,所以循环判断是否已经读空
while(Socket.ReceiveLength<>0) do
begin
S:=S+Socket.ReceiveText;
end;
.............

以上代码有时候好使,有时候又不好使!奇怪的很!从发送端看数据全部都发送了!但是在这个接受端却读不全数据,谁知道什么原因,谢谢!
 

由于网络的差异性,广大编程爱好者不要盲目相信
Send,SendBuffer,SendStream的能力,要充分得到返回值,再来操作,
例如

// 错误或传统的做法:
Var
_Buf:Packed Array [1..8192] Of Char;
begin
socket.send(_Buf,8192); 或

clientsocket.sendBuffer(_Buf,8192); 等

那么接受端不一定就收到8192字节,其实是发送端不一定发送8192字节。
end;


// 正确的做法:
Var
_Buf:Packed Array [0..8192] Of Char;
I:Word;
begin
i:=0;
repeat
i:=i+socket.send(_Buf,8192-i);
until I>=8192;
end;

这样才能保证数据一定达到接受端!
 
http://www.swaysoft.com/developer/srcdetail.asp?flag=2&amp;id=187
使用TServerSocket与TClientSocket的案例(双端口技术)
软件大小: 36483 KB
软件作者: amdcwf
开发环境: Delphi
更新日期: 2003-9-8 14:04:26
下载次数: 447
推荐等级:
作者主页: 不详
下载地址: 下载地址一:
内容简介: 源码中有详尽的注释采用源码中的一应一答的方式进行通讯,不管多少台机器参与,都能保证通讯的完整性


 
我使用的是JAVA编写的客户端发送的数据~,发送端的可以正常的发送,但是在用DELPHI编写的服务器端有的时候就不能正常读出数据。
 
如果是字符串的话
用不着使用循环判断的!!

如果传送二进制的话,上面那个循环也会经常出错的,要想需要另外一种技术

 
我传送的是BASE64编码后的字符串,远远大于8K,对于小于8k的字符串,你说的没错!没有
任何问题!但是如果超过了8K则就会出问题.出现了丢包现象
 
后退
顶部