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

本文介绍了在局域网内实现图像实时传输的一种方法,结合C/S和P2P模型,利用服务器作为索引,节点间直接传输图像数据。通过Bcb6.0和MSSQL实现,图像数据转化为JPG格式减小传输量。文章讨论了这种方法的优缺点,并提供了部分源代码示例。
摘要由CSDN通过智能技术生成

作者:bat603

网址:http://blog.csdn.net/bat603/(本文可以随意转载及修改并可用于任何用处,但须注明作者和网址)

在局域网内实现图像的实时传输(实现环境bcb6.0+MSSQL)

     本来要去睡觉的,但是为了整理一下该文档,还是坐在了电脑旁。明天睡个大头觉。  

     之所以使用bcb6.0,是因为用它开发速度快。但是一个前辈曾经给我说过,bcb开发的软件没有商业价值,当然他说的有点偏颇,不过

也反映了bcb的境遇。不过如果开发较小的项目,使用它的优势还是明显的。
    转入正题,在网络传输信息,有两种模型:C/S、P2P。C/S模式需要在网络内有个服务器,客户端传输信息都要通过服务器进行转发。当传

输信息量较小的文本信息时,采用该方法因为其实现较简单,方便控制信息的传输,所以可以使用,以前的QQ就是采用这个方法,但是如果传

输信息量较大的图像信息时,显然当客户端较多时,服务器的负担会呈级数增加,显然是不合适的。只有使用P2P模式,即节点之间传输,这样

可以把负载平衡到各个节点,效率很高。但是它的缺点也是很明显的,每个节点都要负责维护其他节点的状态信息,实现起来比较复杂。这个

也是现在的研究热点,并有成品出现,但是也是应用于较小的网络。
 在做这个网络协作系统时,由于人力资源较弱,所以我采用了这种的方法。就是把这两者结合,在图像信息传输的时候采用P2P模式,

但是需要在网络内运行一个服务器来负责维护各个节点的状态信息。这样可以极大的减少服务器的负荷,同时节点间传输的实现也比较容易。
        实现方法:服务器运行,监视各个节点的状态。当一个节点登陆网络时,需要向服务器报告自己的状态,并请求得到它希望传输图像

信息的状态信息。当得到信息时,便不再与服务器进行交互,而是自己把图像向节点传输。当该节点退出网络时要向服务器报告。可见服务器

的工作就是一个索引服务器,而负载已经平衡到了各个节点。
        应用背景:在网络协作学习系统中实时协作学习电子白板
 系统中的电子白板是一个虚拟公共学习区域,在问题求解的过程中它作为主要的问题解决方案编辑的协作空间,而不同于聊天室只承

担组内成员沟通和情感维系的工作,以及与教师就学习问题互动的渠道。
 • 实时协作学习电子白板的功能
 ①基本的书写的功能,可以对文字进行协作编辑
 ②对文字可以进行重点标示,以及擦除。
 ③对协作动作进行控制,即在操作前必须首先控制申请,操作结束后解除控制。
 ④可以对文字和标记进行点对点的传输,亦可在组内广播。

         代码实现:节点与服务器的交互采用C/S模式,使用控件ClientSocket/ServerSocket,节点间传输信息,由于需要实现接收和发送两

个功能,所以在每个节点都要有两个控件,一个用来接收,一个用来发送,该系统中使用了NMStrm/NMStrmServ控件。数据库采用MSSQL,当然要

存放在服务器上。有必要强调的是,要把图像的BMP格式转化为JPG格式在进行传输,这样可以大大缩小传输的信息量。

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

#include <vcl.h>
#pragma hdrstop

#include "board.h"
#include "Unit7.h"
#include "Unit1.h"
#include <jpeg.hpp>
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.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->Enabled = false;
    m_npenFlag = 0;//初始化画笔的功能
    Image->Parent->DoubleBuffered = true;
    void *dsdc;
    void *dxwnd;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值