在局域网内实现图像的实时传输

上传人:xiao****1972 文档编号:84931005 上传时间:2019-03-05 格式:DOC 页数:12 大小:116KB
返回 下载 相关 举报
在局域网内实现图像的实时传输_第1页
第1页 / 共12页
在局域网内实现图像的实时传输_第2页
第2页 / 共12页
在局域网内实现图像的实时传输_第3页
第3页 / 共12页
在局域网内实现图像的实时传输_第4页
第4页 / 共12页
在局域网内实现图像的实时传输_第5页
第5页 / 共12页
点击查看更多>>
资源描述

《在局域网内实现图像的实时传输》由会员分享,可在线阅读,更多相关《在局域网内实现图像的实时传输(12页珍藏版)》请在金锄头文库上搜索。

1、 在局域网内实现图像的实时传输 在局域网内实现图像的实时传输(实现环境bcb6.0+MSSQL) 本来要去睡觉的,但是为了整理一下该文档,还是坐在了电脑旁。明天睡个大头觉。 之所以使用bcb6.0,是因为用它开发速度快。但是一个前辈曾经给我说过,bcb开发的软件没有商业价值,当然他说的有点偏颇,不过 也反映了bcb的境遇。不过如果开发较小的项目,使用它的优势还是明显的。 转入正题,在网络传输信息,有两种模型:C/S、P2P。C/S模式需要在网络内有个服务器,客户端传输信息都要通过服务器进行转发。当传 输信息量较小的文本信息时,采用该方法因为其实现较简单,方便控制信息的传输,所以可以使用,以前的

2、QQ就是采用这个方法,但是如果传 输信息量较大的图像信息时,显然当客户端较多时,服务器的负担会呈级数增加,显然是不合适的。只有使用P2P模式,即节点之间传输,这样 可以把负载平衡到各个节点,效率很高。但是它的缺点也是很明显的,每个节点都要负责维护其他节点的状态信息,实现起来比较复杂。这个 也是现在的研究热点,并有成品出现,但是也是应用于较小的网络。 在做这个网络协作系统时,由于人力资源较弱,所以我采用了这种的方法。就是把这两者结合,在图像信息传输的时候采用P2P模式, 但是需要在网络内运行一个服务器来负责维护各个节点的状态信息。这样可以极大的减少服务器的负荷,同时节点间传输的实现也比较容易。

3、实现方法:服务器运行,监视各个节点的状态。当一个节点登陆网络时,需要向服务器报告自己的状态,并请求得到它希望传输图像 信息的状态信息。当得到信息时,便不再与服务器进行交互,而是自己把图像向节点传输。当该节点退出网络时要向服务器报告。可见服务器 的工作就是一个索引服务器,而负载已经平衡到了各个节点。 应用背景:在网络协作学习系统中实时协作学习电子白板 系统中的电子白板是一个虚拟公共学习区域,在问题求解的过程中它作为主要的问题解决方案编辑的协作空间,而不同于聊天室只承 担组内成员沟通和情感维系的工作,以及与教师就学习问题互动的渠道。 实时协作学习电子白板的功能 基本的书写的功能,可以对文字进行协作

4、编辑 对文字可以进行重点标示,以及擦除。 对协作动作进行控制,即在操作前必须首先控制申请,操作结束后解除控制。 可以对文字和标记进行点对点的传输,亦可在组内广播。 代码实现:节点与服务器的交互采用C/S模式,使用控件ClientSocket/ServerSocket,节点间传输信息,由于需要实现接收和发送两 个功能,所以在每个节点都要有两个控件,一个用来接收,一个用来发送,该系统中使用了NMStrm/NMStrmServ控件。数据库采用MSSQL,当然要 存放在服务器上。有必要强调的是,要把图像的BMP格式转化为JPG格式在进行传输,这样可以大大缩小传输的信息量。 该方法的 缺点:在传输图像时

5、,采用的是传输整个图像方法。虽然经过格式优化,但是还是有很大的信息量,较好的方法是传输在白板上的动作信息,比如画线动作,可以采集关键部位的坐标和画笔颜色信息传输,这样更能减少信息量的传输(仲日给提的建议),但是实现起来较麻烦,考虑到时间问题,没有实现。 部分源代码:(部分代码参考csdn的bcb版和) 节点端 /- #include #pragma hdrstop #include “board.h“ #include “Unit7.h“ #include “Unit1.h“ #include /- #pragma package(smart_init) #pragma resource “*

6、.dfm“ TWhiteBoard *WhiteBoard; /- _fastcall TWhiteBoard:TWhiteBoard(TComponent* Owner) : TForm(Owner) /- void _fastcall TWhiteBoard:FormCreate(TObject *Sender) /禁用关闭按钮 EnableMenuItem(GetSystemMenu(Handle,false), SC_CLOSE, MF_DISABLED | MF_BYCOMMAND | MF_GRAYED); Button3-Enabled = false; Timer1-Enabl

7、ed = false; m_npenFlag = 0;/初始化画笔的功能 Image-Parent-DoubleBuffered = true; void *dsdc; void *dxwnd; dxwnd=GetDesktopWindow();/取得桌面句柄 dsdc=GetDC(dxwnd); BitBlt(Image-Canvas-Handle,0,0,NULL,NULL,dsdc,0,0,SRCCOPY); ReleaseDC(dxwnd,dsdc); /- void _fastcall TWhiteBoard:ImageMouseMove(TObject *Sender, TShif

8、tState Shift, int X, int Y) /m_oldCursor = Screen-Cursor; if (m_npenFlag = 1)/输入文本 if (Shift.Contains(ssCtrl)/按下ctrl,要改变文本大小 int xstart,ystart; Screen-Cursor = crSizeNWSE; xstart = myMemo-Left; ystart = myMemo-Top; myMemo-Width = X - xstart; myMemo-Height = Y - ystart; else Screen-Cursor = crCross;

9、if (m_npenFlag = 2)/画笔 if(Shift.Contains(ssLeft) if(x1=-1 y1=Y; /Image-Canvas-Pen-Color=clRed; Image-Canvas-Pen-Width=3; Image-Canvas-MoveTo(x1,y1); Image-Canvas-LineTo(X,Y); else /Image-Canvas-Pen-Color=clRed; Image-Canvas-Pen-Width=3; Image-Canvas-MoveTo(x1,y1); Image-Canvas-LineTo(X,Y); x1=X; y1=

10、Y; if (m_npenFlag = 3)/橡皮 if(Shift.Contains(ssLeft) if(x1=-1 y1=Y; /Image-Canvas-Pen-Color=clRed; Image-Canvas-MoveTo(x1,y1); Image-Canvas-LineTo(X,Y); else /Image-Canvas-Pen-Color=clRed; Image-Canvas-MoveTo(x1,y1); Image-Canvas-LineTo(X,Y); x1=X; y1=Y; /- void _fastcall TWhiteBoard:ImageMouseUp(TOb

11、ject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y) if(Button=mbLeft) x1=-1; y1=-1; /- void _fastcall TWhiteBoard:BitBtn2Click(TObject *Sender) m_npenFlag = 2; if (ColorDialog-Execute() Image-Canvas-Pen-Color = ColorDialog-Color; /- /产生输入文本框 void _fastcall TWhiteBoard:ImageMouseDown(

12、TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y) if (m_npenFlag = 1) if (Button=mbLeft ) if (myMemo != NULL) delete myMemo; myMemo = NULL; myMemo = new TMemo(Owner); myMemo-Parent = Panel1; myMemo-Left = X; myMemo-Top = Y; myMemo-Width = 500; myMemo-Height = 20; myMemo-Ctl3D =

13、false; myMemo-OnMouseMove = Memo1MouseMove; else if (m_npenFlag = 2) x1 = X; y1 = Y; if (m_npenFlag = 3) Image-Canvas-Pen-Color = clCaptionText; Image-Canvas-Pen-Width = 13; Image-Canvas-Rectangle(X-1, Y-1, X, Y); /- void _fastcall TWhiteBoard:BitBtn1Click(TObject *Sender) m_npenFlag = 1; /- void _fastcall TWhiteBoard:Panel1MouseMove(TObject *Sender, TShiftState Shift, int X, int Y) if (m_npenFlag = 1) if(XPanel1-Width|YPanel1-Height) ReleaseCapture(); Screen-Cursor = crArrow; / La

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 大杂烩/其它

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号