你在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;
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;
NUUDP1.SendStream(OutStream)这一句还是报错。
NMStrm1.TimeOut := 0;
NMStrm1.PostIt(OutStream);
是不是有什么特殊的考虑呢?
这些代码是在一个工作线程中,
if MyThread <> nil then MyThread.Free;
MyThread := TMyThread.Create(false);
这不会有什么问题吧?
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的数据也是这样传输的!
(快给分!)
我现在的项目是用D5写的,不好移植到D6。
请给个D5的例子,或者给个D5版的INDY8.X,谢谢啦。
如果一定要在D5里用,就用TClientSocket/TServerSocket吧
Image1.Picture.Bitmap.Assign(jpgY);
你应该先把JPG流保存为BMP格式的文件,然后再LOAD到IMAGE1里去!
to Raptor(猛禽):INDY不能在VCL里用吗?惨了,只有自己写高层传送协议了。把文件流分成几次传出去了。那么这样把Socket收到的几个流合并成一个流呢??回答者就有分啊。
这个帖子我再加到50分。
其实Indy 8.X是一个非常优秀的产品,她不但支持Windows版的Delphi,而且还支持Linux下的Kylix(还是第一个支持),所以宝兰就用她作为内置的网络开发控件了,又因为她太优秀了,所
以新版的Delphi6中也内置,不过可惜,之前的版本没有,给Netmaster捡了便宜。
由于她提供所有的源代码,里面就包含有你所说的分次传输,所以完全不必自己写!
她也有Delphi 5.0的版本.
给个Email我吧,我给你送去.
to rocklee(水城守护人):我的E-mail:[email protected]。
收到后立即给分,反正这100分也收不回来了。
小子,接着吧,我正在送 ...
需要Demo吗?
to rocklee(水城守护人):我已收到你的Email,谢谢。
谢谢各位的回答!!
现在给分。