《C++socket编程》.doc

  1. 1、本文档共37页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
《C++socket编程》.doc

第3章 网络应用 3.1 网络编程基础 多媒体技术与网络技术的结合,使得网络生活变得多姿多彩。从此,网络生活很迷人;网络改变了和改变着人们原本的生活方式。姑且认为DirectShow是单机的多媒体技术,一旦融合了网络技术,DirectShow更显现了它强大的生命力。本章将着重介绍DirectShow技术在网络方面的应用。 网络编程,当然要用到Windows Socket(套接字)技术。Socket相关的操作由一系列API函数来完成,比如socket、bind、listen、connect、accept、send、sendto、recv、recvfrom等。调用这些API函数有一定的先后次序,有些函数的参数还比较复杂,对于开发者来说,不是很好用。于是,微软的MFC提供了两个类:CAsyncSocket和CSocket,极大地方便了Socket功能的使用。这两个类的继承关系如图3.1。 图3.1 MFC Socket类的继承关系 CAsyncSocket类在较低层次上封装了Windows Socket API,并且通过内建一个(隐藏的)窗口,实现了适合Windows应用的异步机制(Windows Socket API默认情况下工作在阻塞模式,不方便直接在消息驱动的Windows程序上使用)。CSocket类从CAsyncSocket类派生,进一步简化了Socket功能的应用。不过很遗憾,正因为这两个类都内建了一个窗口,它们并不是线程安全的(thread-safe);如果要在多线程环境下应用Socket功能,建议自行封装Socket API函数。 使用Socket传输数据主要有两种方式:TCP传输和UDP传输。(OSI参考模型将网络通信分成7个层次,从低往上依次为物理层、数据链路层、网络层、传输层、会话层、表示层、应用层;TCP和UDP均是传输层的协议。)下面,就分别来介绍这两种数据传输方式。 提示:本章在介绍网络通信双方的时候,会使用两组关键词:服务器-客户机和本地端-远程端。其中,服务器-客户机是根据角色来界定的;而本地端-远程端是一个相对概念,依据不同的参照物,可以分别表示不同的角色。比如以服务器为参照物,可以称服务器为本地端,称客户机为远程端;而如果以客户机为参照物,可以称客户机为本地端,称服务器为远程端。 3.1.1 TCP传输 TCP,Transfer Control Protocol的缩写(传输控制协议),是一种面向连接的网络传输协议。TCP协议的特点是,支持多数据流操作,提供流控和错误控制,甚至能完成对乱序到达报文的重新排序等。因此,TCP提供了可靠的应用数据传输服务。 通信双方使用TCP传输的一般过程参考如图3.2。 图3.2 TCP通信的一般过程 本节将要实现一个TCP传输的演示程序TCPDemo,它包括服务器和客户机两个部分。它们的程序界面如图3.3。 图3.3 TCP传输演示程序界面 TCPDemo的演示过程如下: (1)将服务器和客户机两部分程序都运行起来(此时服务器已经启动了侦听客户机连接请求的子线程,侦听端口号为10028)。 (2)在客户机程序界面上输入服务器的IP地址(如果服务器和客户机运行在同一台机器上,IP地址可以指定为)、侦听端口号(因为服务器在10028端口上侦听,这里也应该指定为10028)。 (3)点击客户机程序界面上的“Connect”按钮,向服务器发送Socket连接请求。 (4)服务器侦听到有客户机的连接请求后便接受它(于是在两个程序之间就建立了一条可靠的Socket连接)。然后服务器会向客户机发送两次字符串数据。 (5)客户机接收到数据后,弹出两次如图3.4的消息框。 图3.4 TCP传输客户机接收到数据后显示的消息框 提示:TCPDemo为什么使用10028作为TCP通信的端口号?因为TCP数据包的TCP头结构中,使用了16位的域来表示一个端口号。因此,有65536个可能的端口号。不过,0-1023是周知口(众所周知的端口,比如80是超文本传输协议http的端口,25是简单邮件传输协议smtp的端口,20和21是文件传输协议ftp的端口等),比1023大的端口号通常被称为高端口号。应用程序一般使用高端口号提供自己的通信服务。TCPDemo使用10028端口是偶然的,只要比1023大就可以了。 TCPDemo在具体实现时,设计了一个CTCPListener类专门用于服务器对特定TCP端口的侦听。另外,设计了一个CStreamSocket类专门用于TCP数据的传输。CStreamSocket作为基类,服务器程序从它派生出另一个类CSocketSender专门用于数据的发送,客户机程序从它派生出CSocketReceiver类专门用于数据的接收。这些类的继承结构如图3.5。 图3.

文档评论(0)

wgvi + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档