一个非常怪异的问题?非常值得探讨...(20分)

  • 主题发起人 主题发起人 flycity
  • 开始时间 开始时间
F

flycity

Unregistered / Unconfirmed
GUEST, unregistred user!
下段程序如果把showmessage()那一句去掉,则30054字节的数据只发送8192字节就停了,但加了那一句就能正常运行这是为什么???
procedure TForm1.Button1Click(Sender: TObject);
var
stream:tmemorystream;
bitmap:tbitmap;
buf:array[1..2048] of char;
sendsize,allsize:integer;
begin
sum:=0;
bitmap:=tbitmap.Create;
stream:=tmemorystream.Create;
bitmap.LoadFromFile('d:/temp/wy.bmp');
bitmap.SaveToStream(stream);
allsize:=stream.Size;
size:=allsize;
while (allsize>0) do
begin
if allsize>2048 then
sendsize:=2048 else sendsize:=allsize;
stream.Write(buf,sendsize);
showmessage(inttostr(stream.position));//[:(!][:(!]
nmudp1.SendBuffer(buf,sendsize);
allsize:=allsize-sendsize;
end;

end;
 
或许在NMUdp发送的过程中需要明确定位一下你当前发送内容的位置,
你可以把那句Showmessage()改成Seek()方法试试看。
 
seek()在中间怎么用呢?
 
具体你查一下帮助啊!好象Seek里面有几个参数的,
比如Stream1.Seek(60, 0); { Move to byte 60}
 
替换showmessage(inttostr(stream.position));//[:(!][:(!]
为sleep(100);
让udp有个喘息的机会
 
我用了seek(sofromcurrent,0)但是没有用。
 
你这样肯定不行的,你或许应该这样:Seek(2048*I,0),I是一个循环。
 
to form2:你说的我早就试过了,没用。真的想不通,难道showmessage()能改变某些参数吗??
 
to hjb_dydd: Seek(2048*I,0)也不行[:(]
 
udp系统缓冲就是8k大小!
 
不是8k是2k吧,那要怎么才能解决呢?缓冲能不能改变大小或是...
请大家帮我UP[:)]
 
不值得探讨。你可以写
var
s:string;
.....
while (allsize>0) do
.....
s:=inttostr(stream.position);
.....
使用它不是改变参数,称动态刷新。
 
接受答案了.
 
后退
顶部