请各位帮我看看这段代吗。(50分)

  • 主题发起人 sandra_phh
  • 开始时间
S

sandra_phh

Unregistered / Unconfirmed
GUEST, unregistred user!
我用clientsocket 接收数据时报错,serversocket端发送文件流。
procedure TForm1.ClientSocket2Read(Sender: TObject;
Socket: TCustomWinSocket);
var
mystream: TMemoryStream ;
mybuf: array[0..1000] of byte;
myreclength : integer;
begin

try
mystream := TMemoryStream.Create ;
myreclength := ClientSocket2.Socket.ReceiveLength ;
ClientSocket2.Socket.ReceiveBuf(mybuf,myreclength);//到这行报错
mystream.Write(mybuf,myreclength);
if mystream.Size >= size then
begin
SaveDialog1.Filter := ExtractFileExt(fname) ;
if SaveDialog1.Execute then
begin
mystream.SaveToFile(SaveDialog1.FileName);
end;
end;

finally
mystream.Free ;
end;
end;
还有,我单步调试时发现收到的数据比文件流的数据少,请问serversocket会不会自
动分包发送呢?文件较大时应该怎样做呢?
 
myreclength>1000就出错了
 
to iie, 报错的问题已解决,但程序不像预想的出现保存对话框,而是什么反应也没有,
问题应该还在这段代码?你再帮我看看,好吗?谢谢!
 
没有人能帮忙吗?
 
serversocket会自动分包发送的,当你的文件自动分包后,从你的程序看
if mystream.Size >= size then
始终是假的,程序当然无法执行到下面的语句。
你应该将mystream申明为全局变量,这样当每次收到数据包后通过
mystream.Write(mybuf,myreclength);///追加入流后
该if mystream.Size >= size then
就会成立完成你的要求,当然执行完你的要求后,记得
mystream.Clear;否则下次接受时就不正确了。
 
谢谢,问题解决了。
 
顶部