怎样实现socket传输内存流?高手请关注一下,最好带些源码!
解决方案 »
- [讨论] 你所不知道的inherited
- 基于数据库处理的系统中,采用什么解决方案最好?
- SQL Server中取出TimeStamp类型的数据
- 一个很可能是最简单的局域网问题......
- 想做一个局域网歌曲点播系统,由于网络编程不是很熟悉,请大家提供提供思路!
- help
- 请问InfoPower3000Std_vcl5的安装序列号及安装密码?
- 在多线程中信号灯(Semaphore)、互斥(Mutex)、临界区(CriticalSection)和事件(Event)对象分别有什么区别?什么时候该用哪一种对象?
- 不是吧,那个数据库程序那么多人要?我那里也有一个更强的啊!
- 急急急~~~ 会用fastreport控件的朋友麻烦进来帮个忙
- 给分讨论注册表子键项判断是否在的问题!
- 一个奇怪问题,无法解决,请高手指点?
如果不是只要将内存中的数据复制到一个缓冲中发送。
也可以用TNMStrm控件来传送
Form1: TForm1;
m1:tmemorystream;
sendhost:string;
implementation
……
procedure TForm1.undercontrolClientRead(Sender: TObject;
Socket: TCustomWinSocket);
var
s,s1:string;
desk:tcanvas;
bitmap:tbitmap;
jpg:tjpegimage; begin
s:=socket.ReceiveText;
if s='gets' then
begin
bitmap:=tbitmap.Create;
jpg:=tjpegimage.Create;
desk:=tcanvas.Create;
desk.Handle:=getdc(hwnd_desktop);
m1:=tmemorystream.Create; //初始化流m1,在用sendstream(m1)发送流后,
//它将保留到socket对话结束,
//不能用手工free掉,否则会触发异常
with bitmap do
begin
width:=screen.Width;
height:=screen.Height;
canvas.CopyRect(canvas.cliprect,desk,desk.cliprect);
end;
jpg.Assign(bitmap);
jpg.SaveToStream(m1);
jpg.free;
m1.Position:=0;
s1:=inttostr(m1.size);
Socket.sendtext(s1);
end;
if s='okok' then
begin
m1.Position:=0;
Socket.SendStream(m1); //发送JPG图象
end;