>>1.Client端显示的屏幕图像是错误的。 server端 else if s = 'GetNextScreen' then //传输下一幅 begin Screenimg.GetNextBMP(Tmpstream); if Tmpstream.Size <> 0 then begin AContext.Connection.IOHandler.WriteLn('NextScreen'); Tmpstream.Position :=0; AContext.Connection.IOHandler.Write(Tmpstream,0,true); tmpstream.Clear ; end else AContext.Connection.IOHandler.WriteLn('ScreenNotChange'); end client端: else if s = 'NextScreen' then begin i:=TheClient.IOHandler.ReadInteger ; Inc(Num ); Form1.StatusBar1.Panels[0].Text := Format('Recvicing %d frame,Size%dByte',[Num,i]); TheClient.IOHandler.ReadStream(tmpstream,i); if stopts then TheClient.IOHandler.WriteLn('StopScreenTransfer') else TheClient.IOHandler.WriteLn('GetNextScreen'); Synchronize(Form1.LoadNext); tmpstream.Clear; Inc(totalrev,i); Inc(speed ); end else if S = 'ScreenNotChange' then begin Inc(Num ); Form1.StatusBar1.Panels[0].Text := Format('Recvicing %d frame,Screen did not change!',[Num]); Inc(totalrev,i); Inc(speed ); if stopts then TheClient.IOHandler.WriteLn('StopScreenTransfer') else TheClient.IOHandler.WriteLn('GetNextScreen'); end; >>3.当然还有那个白屏的问题的。 procedure TForm1.LoadNext; var P:TPoint; ssize,i,ss:Integer; begin if not Assigned(tmpstream1) then tmpstream1:=TMemoryStream.Create; ss:= tmpstream.Size; tmpstream.Seek(0,soFromBeginning ); i:=0; while i < ss do begin i:= i + tmpstream.Read(p,SizeOf(p)); i:= i + tmpstream.Read(ssize,SizeOf(Integer )); i:= i + tmpstream1.CopyFrom(tmpstream,ssize) ; MyDeCompress(tmpstream1); tmpstream1.Position :=0; TmpBmp.LoadFromStream(tmpstream1 ); Image1.Canvas.Draw(p.X,p.Y,TmpBmp); tmpstream1.Clear; end; end;
to guanyueguan 既然你有这种方法的代码,那还要我的干嘛?我很菜,我不是计算机专业的,没学过算法,数据结构也只是自学了一点,我想你下的代码质量一定比我的高吧. 本来发这个代码上来我是想有人能帮我结解决存在的问题,并且优化算法,因为自己弄的实在是头大(因为我很菜...),但现在看来现有的bug&优化基本上都是自己解决的.....