流的问题 ( 积分: 33 )

  • 主题发起人 主题发起人 guxlei1
  • 开始时间 开始时间
G

guxlei1

Unregistered / Unconfirmed
GUEST, unregistred user!
用socket发送流
filename:='c:/1.zip'
myfile:=tfilestream.Create(filename,fmOpenRead);
myfile.Seek(0,soBeginning);
mystream.copystream(myfile,myfile.size);//这句会出错,1.zip大小为30M
serversocker1.socket.sendstream(mystream);
请问为什么?
-----------------------------
换了种方法
mybuffer:array [0..10000] of char
myfile.Seek(0,soBeginning);
myfile.Write(mybuffer,10000);
serversocker1.socket.SendBuf(mybuffer,10000);
一次只发送10000个字节,然后
myfile.seek(k*10000,soBeginning);
myfile.Write(mybuffer,10000);
serversocker1.socket.SendBuf(mybuffer,10000);
k为客户端每次接到数据后把k加一再发给服务器。服务器就可以把下10000个字节发给客户端,这时还是有问题。当发送时服务器和客户端都不能进行其他操作了。只有等发送完成才能动了。为什么?
而且客户端每次接收的数据不会超过8192,是不是一次最大只能发送8192个字节?
---
我是个新手,代码有什么错误别笑。只是按我的想法写的。请大家告诉我
 
用socket发送流
filename:='c:/1.zip'
myfile:=tfilestream.Create(filename,fmOpenRead);
myfile.Seek(0,soBeginning);
mystream.copystream(myfile,myfile.size);//这句会出错,1.zip大小为30M
serversocker1.socket.sendstream(mystream);
请问为什么?
-----------------------------
换了种方法
mybuffer:array [0..10000] of char
myfile.Seek(0,soBeginning);
myfile.Write(mybuffer,10000);
serversocker1.socket.SendBuf(mybuffer,10000);
一次只发送10000个字节,然后
myfile.seek(k*10000,soBeginning);
myfile.Write(mybuffer,10000);
serversocker1.socket.SendBuf(mybuffer,10000);
k为客户端每次接到数据后把k加一再发给服务器。服务器就可以把下10000个字节发给客户端,这时还是有问题。当发送时服务器和客户端都不能进行其他操作了。只有等发送完成才能动了。为什么?
而且客户端每次接收的数据不会超过8192,是不是一次最大只能发送8192个字节?
---
我是个新手,代码有什么错误别笑。只是按我的想法写的。请大家告诉我
 
怎么没人回答我?
 
等待中...
 
8192是不是接收缓冲区长度?
 
發送流只需這樣做即可:
var Fs: TFileStream;
begin
Fs := TFileStream.Create(Handle);
Fs.Create(OpenDialog1.FileName,fmOpenRead or fmShareDenyWrite);
Fs.Position := 0;
serversocker1.socket.sendstream(Fs);
end;
默認情況一次接收最大量為8K
 
后退
顶部