用Delphi开发视频聊天软件(三)

用Delphi开发视频聊天软件(三),第1张

    频聊天软件客户端

     )新建一个工程 命名为Project dpr

     )在程序窗口Form 上放置一个image控件 该控件用于接收的图像内容 再放置一个Tbutton控件 caption为 接收 放置一个UDPServer组件 这里用indy的IdUDPServer用来接收网络视频 如图示

    接收按钮代码

    IdUDPServer DefaultPort:= ; //接收端口 IdUDPServer Active:=true; //启用

    IdUDPServer 的UDPRead事件代码

    var jpg:TJpegImage;begin try jpg := TJpegImage Create; jpg LoadFromStream(Adata); Image Picture Bitmap Assign(jpg); jpg Free; exceptend;end;

    视频的传输是压缩成JPG进行传输的 服务器端和接收端都用到了jpeg单元 所以use中都要加入jpeg

    完整的视频聊天软件客户端代码

    unit Unit ;    interfaceuses Windows Messages SysUtils Variants Classes Graphics Controls Forms Dialogs StdCtrls IdBaseComponent IdComponent IdUDPBase IdUDPServer ExtCtrls jpeg IdSocketHandle;    type TForm = class(TForm) Image : TImage;    IdUDPServer : TIdUDPServer;    Button : TButton;    procedure Button Click(Sender: TObject);    procedure IdUDPServer UDPRead(Sender: TObject;    AData: TStream; ABinding: TIdSocketHandle);    private { Private declarations }    public    {    Public declarations    }    end;    var Form : TForm ;    implementation{$R dfm}procedure TForm Button Click(Sender: TObject);    begin    IdUDPServer DefaultPort:= ; //接收端口    IdUDPServer Active:=true; //启用    end;    procedure TForm IdUDPServer UDPRead(Sender: TObject;AData: TStream; ABinding: TIdSocketHandle);    var jpg:TJpegImage;    begin    try    jpg := TJpegImage Create;    jpg LoadFromStream(Adata);    Image Picture Bitmap Assign(jpg);    jpg Free;    except    end;    end;    end

    好了 到这里程序代码也就写完了 在机上运行视频聊天软件服务器程序 点开始就开始进行视频的传输了 在网络上(网段为 X 根据你的网络设置IP地址 我这用的局域网测试)的任何一台机上运行视频聊天软件客户端点接收都能接收到视频了

 如果要接收的视频内容清晰点 可以设置jpg CompressionQuality:= ;(这个值可以是从 至 数值越大 图像越清晰 当然传输的速度会越慢了 图像越清晰 数据包就会越大 如果超出了UDP包限制 看到图像就不完整了)

    视频聊天软件服务器

    聊天软件客户端

    四 结束语

lishixinzhi/Article/program/Delphi/201311/24738

即时通讯(Instant Messenger,简称IM)软件多是基于TCP/IP和UDP进行通讯的,TCP/IP和UDP都是建立在更低层的IP协议上的两种通讯传输协议。前者是以数据流的形式,将传输数据经分割、打包后,通过两台机器之间建立起的虚电路,进行连续的、双向的、严格保证数据正确性的文件传输协议。而后者是以数据报的形式,对拆分后的数据的先后到达顺序不做要求的文件传输协议。

    QQ就是使用UDP协议进行发送和接收消息的。当你的机器安装了OICQ以后,实际上,你既是服务端(Server),又是客户端(Client)。当你登录OICQ时,你的OICQ作为Client连接到腾讯公司的主服务器上,当你“看谁在线时,你的OICQ又一次作为Client从QQ Server上读取在线网友名单。当你和你的OICQ伙伴进行聊天时,如果你和对方的连接比较稳定,你和他的聊天内容都是以UDP的形式,在计算机之间传送。如果你和对方的连接不是很稳定,QQ服务器将为你们的聊天内容进行中转。其他的即时通信软件原理与此大同小异。

 

   一般的步骤:

   首先,用户A输入自己的用户名和密码登录即时通讯服务器,服务器通过读取用户数据库来验证用户身份,如果用户名、密码都正确,就登记用户A的IP地址、IM客户端软件的版本号及使用的TCP/UDP端口号,然后返回用户A登录成功的标志,此时用户A在 IM系统中的状态为在线(Online Presence)。

  其次,根据用户A存储在IM服务器上的好友列表(Buddy List),服务器将用户A在线的相关信息发送到也同时在线的即时通讯好友的PC机,这些信息包括在线状态、IP地址、 IM客户端使用的TCP端口(Port)号等,即时通讯好友PC机上的即时通讯软件收到此信息后将在PC桌面上弹出一个小窗口予以提示。

  第三步,即时通讯服务器把用户A存储在服务器上的好友列表及相关信息回送到他的PC机,这些信息包括也在线状态、IP地址、IM客户端使用的TCP端口(Port)号等信息,用户A的PC机上的IM客户端收到后将显示这些好友列表及其在线状态。

  接下来,如果用户A想与他的在线好友用户B聊天,他将直接通过服务器发送过来的用户B的IP地址、TCP端口号等信息,直接向用户B的PC机发出聊天信息,用户B的IM客户端软件收到后显示在屏幕上,然后用户B再直接回复到用户A的PC机,这样双方的即时文字消息就不通过 IM服务器中转,而是通过网络进行点对点的直接通讯,这称为对等通讯方式(Peer To Peer)。在商用即时通讯系统中,如果用户A与用户B的点对点通讯由于防火墙、网络速度等原因难以建立或者速度很慢, IM服务器还提供消息中转服务,即用户A和用户B的即时消息全部先发送到IM服务器,再由服务器转发给对方。早期的IM系统,在IM客户端和IM服务器之间通讯采用采用UDP协议,UDP协议是不可靠的传输协议,而在 IM客户端之间的直接通讯中,采用具备可靠传输能力的TCP协议。随着用户需求和技术环境的发展,目前主流的即时通讯系统倾向于在即时通讯客户端之间、即时通讯客户端和即时通讯服务器之间都采用TCP协议。

DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
网站模板库 » 用Delphi开发视频聊天软件(三)

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情