在服务器端,用BlobStream提出图片,用Socket流或者别的什么网络传输到客户端,客户端同样保存在流里,在传输的时候,传递文件类型的参数,由客户端将流赋给TImage。你的问题就是一个界面/数据分离式的问题,通用的方法使用Adapter模式,即用双方都可接受的中间类传输数据。

解决方案 »

  1.   

    TO:ksxy
      要用到midas吗?
      

  2.   

    这有什么好挑战的。
    ksxy讲的很对;
    delphi也有例子。----------------
    http://www.truevcl.com
      

  3.   

    在请问高手一下:
      用TClientDataSet速度快,还是这样速度快?
      

  4.   

    DELPHI里不是有个FILESTREAM的例子吗~~~看看好了~~~~
      

  5.   

    这个问题可以分为两个方面:用不用TClientDataSet一般不是由速度决定的(下面再说速度的问题)。关键在于程序需要实现什么样的功能。如果就是一个简单的C/S或者三层数据库程序,用TClientDataSet可以让代码简化,程序清楚。合理配置服务器和客户端的工作模式,一样可以达到很高的速度。只有在需要实时监控这样的高速度的场合才有必要用到Socket编程。通用数据库编程,建议用TClientDataSet,但要合理。速度的问题,关键在于网络传输。带宽是稀少的资源,在本地操作总比远程操作合算。合理减少网络传输的数据量,为数据连接配置合理的参数(关于参数的配置,请参看李维的书),就可以收到很好的效果了。一个例子:有人说TClientDataSet速度太慢,理由是他做了一个程序,将数据提到客户端,在客户端执行SQL选取,结果慢的无法忍受。如果程序是由客户端提交动态SQL参数给服务器端接口,由服务器做完数据选取,处理等等工作,只把需要的数据传回客户端,又怎样?结果是,执行的效率得到飙升。
      

  6.   

    TO: kxsy
      我这个程序正是要实时监控,所以速度上不能有问题.
      我现在正在试WinSocket传输!如果遇到问题还要向你请教,希望不吝赐教!
      

  7.   

    现在实现了用TServerSocket 和TClientSocket传输图象!
    但现在我想再问一个问题:
    因为我的程序是要实时监视,客户端只是被动的接收信息,服务器只要有更新就要发给客户端,
    因为有图象,所以要传输的资料可能很大,这时如果客户端还没有将前面的资料接收完,服务器又发送过来,客户端接收的资料就错了,前面的资料和后面发的连在一起了,客户端就显示不出来了,如果服务器发送的间隔长一点就一切OK。
    我也试过让客户端接收完资料后,发消息给服务器让它发下一个,但如果服务器的更新非常的快,而客户端接的却很慢,又有可能造成延时!
    因为要实时监视,资料不能丢失,不能出错,不能延时,很头痛。
    各位有是么好的办法可以解决这个问题?
      

  8.   

    如果用户连接数量少,就用多线程啦,一个连接负责一个线程的数据发送,如果不发消息就pause,发送的话就把要发的内空放到服务器的缓冲池,然后由线程控制相应的连接发送数据。缓冲池可以用数组的形式,又可以链表,当然,用TList也行。Tlist的最大好处是提供一个排序的功能。如果连接用户极多,我想最好搞成midas+自编的winsock代码,把所有计算都集中去其它服务器,然后用一台服务器专门负责数据的发送,也就是说发送数据的服务器就是一个没有数据显示控件的瘦客户。这个数据发送用服务器用N(N是固定不变的)条线程负责数据发送,如果服务器应付不了,就是服务不够快啦(比如带宽,计算性能之类)。当然,这里也用到缓冲池,多线程和数据据缓冲池是必不可少啦。我想你的情况和股票接收机差不多吧?我想知道是什么应用环境呢。