我的程序是一个 C/S 架构的小程序,服务器端定期截屏,然后把截屏的图像传送到客户端。
因为 Delphi 的 TNMUDP.SendBuffer() 每次只能发送 2K 的数据,多了发送操作就要失败,所以我的算法是:
将每幅图像的数据分成多个帧,客户端接收到所有帧后再组合,组合完成后,再回显图像。// 帧是这样定义的:
type
  PDataGramFrame = ^TDataGramFrame;
  TDataGramFrame = Record
    TotalLength: integer;                               // 数据报总长度
    LengthOfCurFrame: integer;                          // 当前帧长度
    IsLastFrame: Boolean;                               // 最后一帧?
    Data: array[0..SIZEOFPERFRAME-1] of char;           // 数据区
  end;
现在有一个非常尴尬的问题:UDP 传送数据并不可靠!
请见【图1】(论坛不能上传图片,我只好把图片放到了我的QQ空间里):
服务器端截屏后将图像分解成58帧,并发送到客户端。
可是,客户端在接收时第16 - 20帧、第22帧都丢失了,因接收到的图像数据不完整,导致客户端无法回显图像。各位朋友,这个问题该如何解决呢?
难道传送截屏图像到对端,必须使用 TCP 连接吗?

解决方案 »

  1.   

    网络没问题的话,UDP丢包虽然会有, 但是不会太高
    首先得排除到服务器网络的问题,再来考虑代码, 可以写个简单的代码, 测试下服务器和你这边的网络通信的UDP丢包率。
    如果丢包率过高, 自己加验证,发送失败重新发送 
      

  2.   


    我晕~~~
    那我不就等于去实现了个TCP?
      

  3.   

    这样就算实现了TCP? 你太天真了