你在jpgY.LoadFromStream(OutStream); 之前需要
OutStream.Position :=0;~~完整代码如下~~
var
  jpgX, jpgY : TJPEGImage;
  OutStream : TMemoryStream;
begin
  jpgX := TJPEGImage.Create;
  jpgX.LoadFromFile('F:\Test.jpg');
  jpgX.CompressionQuality := 50;
  OutStream := TMemoryStream.Create;
  jpgX.SaveToStream(OutStream);  
  jpgY := TJPEGImage.Create;
  OutStream.Position :=0;
  jpgY.LoadFromStream(OutStream);              
  Image1.Picture.Bitmap.Assign(jpgY);
  NMUDP1.SendStream(OutStream);    
end;

解决方案 »

  1.   

    TSTREAM 不允许直接建立,,
      

  2.   

    谢谢两位。
    NUUDP1.SendStream(OutStream)这一句还是报错。
      

  3.   

    不好意思,是NMUDP1.SendStream(OutStream);
      

  4.   

    现在我该用TNMStrm来转送文件流。但是有时收到,有时收不到。在自己的机器上两个程序对传成功的机会高一些。在网络上就成功率很低。
    NMStrm1.TimeOut := 0;
    NMStrm1.PostIt(OutStream);
    是不是有什么特殊的考虑呢?
    这些代码是在一个工作线程中,
    if MyThread <> nil then MyThread.Free;
    MyThread := TMyThread.Create(false);
    这不会有什么问题吧?
      

  5.   

    TNMSstrm发送文件在1m以上就容易出错
      

  6.   

    我又要发言了!
       Reigod遇到过的种种错误,我以前也有遇见过。
       因为UDP每次发送的数据包只能是很少的,且是点对点的,无C/S的概念,是否到达对方,它也不理会,常常会引起数据丢失,所以UDP最好用于聊天室的数据传输。
       引而最好是使用TCPIP,我以前也用过TNMSTRM传数据,但后来发现了一顶级的网络元件INDY8.X(现在在Delphi6和Kylix中有), 含source的. 使用INDY的最大好处是不含有Forms,Graphic这些无用的单元(对网络通讯而言), 令写出来的EXE特别小,最适合写服务程序序(我说的是不使用DELPHI的TSERVICE,因为那个单元又引用了Forms,而自己手写),特别爽!
       现在说一下,如何传输巨大的数据包吧!
       因为Tcpip server和Tcip Client两个控件都有两组配对的方法就是
         Readinteger和Readstream
         writeinteger和writestream
       你可以这样写:
        tcpipclient.writeinteger(outstream.size); //先写入数据包的大小
        tcpipclient.writestream(outstream); //再写入包
       而在Server端:
       l_size:= tcpipserver.readinteger; //读入数据包的大小.
       tcpipserver.readstream(l_stream,l_size); //读入数据包,OK!
       l_stream.position:=0;
       .....
       我用这种方法几M的数据也是这样传输的!
    (快给分!)
      

  7.   

    WriteInteger、WriteStream是INDY8.X里的吗?在D5里没有啊。
    我现在的项目是用D5写的,不好移植到D6。
    请给个D5的例子,或者给个D5版的INDY8.X,谢谢啦。
      

  8.   

    INDY是基于CLX的,D5应该不能用吧。
    如果一定要在D5里用,就用TClientSocket/TServerSocket吧
      

  9.   

    这一句:
    Image1.Picture.Bitmap.Assign(jpgY);
    你应该先把JPG流保存为BMP格式的文件,然后再LOAD到IMAGE1里去!          
      

  10.   

    to yypp(fly):这一句绝无问题。你可以试试。
    to Raptor(猛禽):INDY不能在VCL里用吗?惨了,只有自己写高层传送协议了。把文件流分成几次传出去了。那么这样把Socket收到的几个流合并成一个流呢??回答者就有分啊。
    这个帖子我再加到50分。
      

  11.   

    Image1.Picture.Bitmap.Assign(jpgY);          // 到这里会出错。这个流有什么问题呢?不明白。你不是说这里出错吗?
      

  12.   

       喂,reigod,告诉你倒可以,不过你要给分我,要不,我就快穷死了!
       其实Indy 8.X是一个非常优秀的产品,她不但支持Windows版的Delphi,而且还支持Linux下的Kylix(还是第一个支持),所以宝兰就用她作为内置的网络开发控件了,又因为她太优秀了,所
    以新版的Delphi6中也内置,不过可惜,之前的版本没有,给Netmaster捡了便宜。
       由于她提供所有的源代码,里面就包含有你所说的分次传输,所以完全不必自己写!
       她也有Delphi 5.0的版本.
       给个Email我吧,我给你送去.
       
      

  13.   

    to yypp(fly):这一句是因为原来前面没有使用OutStream.Position :=0;它本身是正确的。
    to rocklee(水城守护人):我的E-mail:[email protected]
    收到后立即给分,反正这100分也收不回来了。
      

  14.   

      不好意思,我现在才上网。
      小子,接着吧,我正在送 ...
      需要Demo吗?
      

  15.   

    终于在开发文档区找到了解决方法。
    to rocklee(水城守护人):我已收到你的Email,谢谢。
    谢谢各位的回答!!
    现在给分。