用Visual C++ 40实现Windows 95 Socket编程.docx_第1页
用Visual C++ 40实现Windows 95 Socket编程.docx_第2页
用Visual C++ 40实现Windows 95 Socket编程.docx_第3页
用Visual C++ 40实现Windows 95 Socket编程.docx_第4页
用Visual C++ 40实现Windows 95 Socket编程.docx_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

用Visual C+ 4.0实现Windows 95 Socket编程 Windows 95 Socket 提 供 了 在 Microsoft Windows 95 中 进 行 网 络 程 序 设 计 的 一 个 接 口, 它 是 在 Unix Socket 的 基 础 上 发 展 而 来 的, 不 仅 保 留 了Unix Socket 原 有 的 风 格, 而 且 还 融 入 了 适 合 于 Windows 95 的 新 特 点, 这 使 得 用 户 可 以 利 用 Windows 95 Socket API 直 接 进 行 进 程 与 应 用 程 序 间 的 通 信。Windows 95 在Internet 支 配 域 中 的TCP/IP 协 议 定 义 了 Socket 编 写 规 程, 使 用 Socket 的 目 的 是 使 用 户 在 网 络 协 议 上 工 作 而 不 必 对 该 网 络 协 议 有 非 常 深 入 的 了 解。 此 外, 这 样 编 写 的 程 序 可 被 迅 速 移 植 到 任 何 支 持 Socket 的 网 络 系 统 中 去。 Microsoft Windows Class Library( MFC ) 中 提 供 了 CSocket 类 用 来 实 现 网 络 通 信。 图 一 中 给 出 了CSocket 类 的 继 承 关 系。 下 面 将 介 绍 用Visual C+ 4.0 在Windows 95 中 实 现 Socket 的 CSocket 类 相 关 成 员 函 数( 这 些 成 员 函 数 实 际 上 是 从CAsyncSocket 类 继 承 来 的 )。 (1) BOOL Create( UINT nSocketPort = 0, int nSocketType = SOCK_STREAM, long lEvent = FD_READ |FD_WRITE|FD_OOB|FD_ACCEPT|FD_CONNECT| FD_CLOSE,LPCTSTR lpszSocketAddress = NULL ) 该 函 数 用 来 建 立Socket。 其 中,nSocketPort 为 所 选 择 的 Socket 端 口, 一 般 要 大 于 1023, 如 果 该 参 数 为 0, 则 由 系 统 选 定 一 端 口, 默 认 值 为 0 ;nSocketType 为 套 接 字 类 型 :SOCK_STREAM 表 示 为 流 套 接 字, SOCK_DGRAM 表 示 为 数 据 报 套 接 字, 默 认 值 为 SOCK_STREAM ;lEvent 标 识 该 Socket 要 完 成 哪 种 工 作, 默 认 值 为FD_READ|FD_WRITE|FD_OOB| FD_ACCEPT|FD_CONNECT|FD_CLOSE ;lpszSockAddress 为 网 络 地 址 信 息 结 构 指 针, 包 含 网 络 地 址 , 默 认 值 为 NULL 。 (2)BOOL Bind( UINT nSocketPort, LPCTSTR lpszSocketAddress = NULL ) 该 函 数 的 作 用 是 将Socket 端 口 与 网 络 地 址 连 接 起 来。 参 数 含 义 同 上 。 (3)BOOL Listen( int nConnectionBacklog = 5 ) 该 函 数 的 作 用 是 等 待Socket 请 求。 其 中,nConnec-tionBacklog 表 示 等 待 队 列 的 长 度, 默 认 值 为 最 大 值 5 。 (4)virtual BOOL Accept( CAsyncSocket rConnectedSocket, SOCKADDR* lpSockAddr = NULL, int* lpSockAddrLen = NULL ) 该 函 数 的 作 用 是 取 得 队 列 上 第 一 个 连 接 请 求 并 建 立 一 个 具 有 与Socket 相 同 特 性 的 套 接 字。 其 中,rConnectedSocket 表 示 一 个 新 的 Socket 。 (5)BOOL Connect( LPCTSTR lpszHostAddress, UINT nHostPort ) 该 函 数 的 作 用 是 提 出 请 求。 其 中,lpszHostAddress 和 nHostPort 为 接 受 请 求 进 程 的 网 络 地 址 和 Socket 端 口 号 。 (6)virtual void Close( ) 该 函 数 的 作 用 是 关 闭 该 Socket 。 利 用 CSocket 类 直 接 进 行 数 据 通 信 有 两 种 方 式 : 一 种 是 利 用 CSocketFile 类 和 Archive 类 去 实 现, 另 一 种 是 利 用 CSocket 的 成 员 函 数 Receive、Send、ReceiveFrom、SendTo、Listen 和 Accept 等 来 实 现( 这 些 成 员 函 数 实 际 上 也 是 从CAsyncSocket 类 继 承 的)。 两 种 方 法 的 实 现 步 骤 如 下 : Server : Construct Creat Bind Listen Accept SendClose ; Cilent : Construct Creat Connect Receive Close。 下 面 我 就 用 Visual C+ 4.0 的 代 码 段 分 别 介 绍 如 何 运 用 上 述 两 种 方 法 来 实 现Socket 编 程。 1、 利 用 CSocketFile 类 和 Archive 类 实 现 (1)Server / construct a socket CSocket sockSrvr; / create the SOCKET sockSrvr.Create(nPort); / start listening sockSrvr.Listen( ); /construct a new, empty socket CSocket sockRecv; / accept connection sockSrvr.Accept( sockRecv ); / construct file object CSocketFile file(&sockRecv); / construct an archive CArchive arIn(&file, CArchive:load); /*or*/_CArchive arOut(&file, CArchive:store); / use the archive to pass data arIn dwValue; /*or*/ arOut dwValue; (2)Client / construct a socket CSocket sockClient; / create the SOCKET sockClient.Create( ); / seek a connection sockClient.Connect(strAddr, nPort); / construct file object CSocketFile file(&sockClient); / construct an archive CArchive arIn(&file, CArchive:load); /*or*/_CArchive arOut(&file, CArchive:store); / use the archive to pass data arOut dwValue; 上 述 为 Client/Server 模 式 的 两 个 进 程, 用 于 完 成 两 个 进 程 间 一 个 数 据 变 量 的 通 信。 其 中, nPort 是Socket 的 端 口 号,strAddr 是 该 机 器 的IP 地 址( 如 或 FTP:/RedA 等), 这 两 个 变 量 在Server 和Client 中 要 一 致。 当Server 进 程 运 行 至 Listen 后 便 处 于 睡 眠 状 态 直 到 Client 进 程 执 行 Connect 时 才 被 唤 醒, 而 后 两 个 进 程 便 开 始 传 输 数 据 了。 2、 利 用 CSocket 的 成 员 函 数 实 现 (1)Server / Socket initial if(!AfxSocketInit() MessageBox(WindowsSocket initial failed!,Send,MB_ICONSTOP); Return; / Construct two socket CSocket ChatSend,server; / Creat a SOCKET if(!ChatSend.Create(nPort) / nPort=1025 MessageBox(SendSocket create failed!, Send,MB_ICONSTOP); else / Associates a local address with the socket ChatSend.Bind(nProt,strAddr); / strAddr= / Start Listening ChatSend.Listen(); / Creat a new socket and accepts a connection on /the socket ChatSend.Accept(Server); / Send a CString Server.SendTo(csSendText,csCounts,nPort,strAddr); / Close the two socket Server.Close(); ChatSend.Close(); (2)Client / Socket initial if(!AfxSocketInit() MessageBox(WindowsSocket initial failed!, Receive,MB_ICONSTOP); return; / Construct a socket CSocket ChatRecieve; / Creat a SOCKET if(!ChatReceive.Create() MessageBox(ReceiveSocket create failed!,Receive,MB_ICONSTOP); return; else / Establishes a connection to a peer socket ChatReceive.Connect(strAddr,nPort); / Receive the CString ChatReceive.ReceiveFrom(csReceiveText,csCounts,strAddr,nPort); / Close the socket ChatReceive.Close(); 上 述 两 个 进 程 完 成 的 工 作 是 : 由Server 进 程 发 送 一 字 符 串,Client 进 程 接 收。 strAddr 和 nPort 的 含 义 与 方 法1 中 的 相 同 ;csSendText 和 csReceiveText 为 发 送 与 接 收 的 字 符 串 ;csCounts 为 字 串 长 度, 这 一 长 度 在 两 个 进

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论