第16章网络程序设计.ppt

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

第十六章 网络程序设计 16.1 Windows Socket程序设计: 在Windows环境下实现的Windows Sockets 功能都是通过动态链接库DLL实现的。 Windows Sockets API有Windows 3.x和Windows NT两种版本。 套接字(Socket):TCP/IP网络通信的基本构件,是可以被命名和寻址的通信端点。 第一套接字都有类型和一个与之相连的进程。 Windows Socket2.0支持的套接字类型: 1.流式套接字(SOCK_STREAM) 对应于不按记录定界的数据字节流。提供一个面向连接的、可靠的、无差错且按发送顺序接收的服务。例如文件传输FTP就使用流式套接字。 2.数据报式套接字( SOCK_DGRAM) 提供一个无连接服务。数据按固定的最大长度进行传输,它不能保证按顺序传输数据,有可能出现数据的重复或者丢失。 3.原始套接字( SOCK_RAW ) 允许对较低层协议,如IP,ICMP直接访问。常用于检验新的协议实现或访问现有服务中配置的新设备。 网络进程通信中进程的标识: 三元组:协议,本地主机地址,本地端口号 完整的进程通信中进程的标识: 五元组(协议, 本地主机地址,本地端口号,远端主机地址,远端端口号) Windows Sockets编程特点 Windows Sockets为了支持Windows的消息驱动机制,使应用程序开发者能够方便地处理网络通信,对网络事件采用了基于消息的异步存取策略。特点: 异步选择机制: 异步请求函数 阻塞处理方法 出错处理 启动和终止 Socket的建立流程 无连接协议的套接字调用时序图 16.1.3 编程实例介绍 例:设计一个简单的TCP/IP通信程序:一个简单的基于连接的点对点实时通信程序,它由两部分组成:服务器在主机UNIX下直接运行, 客户机在Windows下运行。 16.1.3 编程实例介绍 2.CLIENT介绍: 程序的主要部分:主窗口函数ClientProc(), 初始化套接字: Status = WSAStartup(VersionReqd, lpmyWSAData); hostaddr = gethostbyname(server_address); 进入消息循环,创建套接字:调用Client()来启动套接字 进程不断地进行消息循环,等待用户通过菜单选择启动。这时,通过调用Client()来启动套接字。在Client()中,首先也是调用socket()来建立套接字。如下所示: if ((s = socket(AF_INET, SOCK_STREAM, 0)) == INVALID_SOCKET) { AlertUser(hWnd, Socket Failed); return (FALSE); } 调用WSAAsyncSelect()函数提名FD_CONNECT网络事件: SetSelect()主要是调用WSAASyncSelect(),让Windows Sockets DLL在侦测到连接建立时,就发送一条UM_SOCK的自定义消息,使消息循环继续下去。如下所示: BOOL SetSelect(HWND hWnd, Long lEvent) { if (WSAAsyncSelect(s, hWnd, UM_SOCK, lEvent) == SOCKET_ERROR) { AlertUser(hWnd, WSAAsyncSelect Failure.); return (FALSE); } return (TRUE); } 2.CLIENT介绍: 建立连接 调用connect():connect(s, (struct sockaddr FAR *)dst_addr, sizeof(dst_addr)); 由于先调用了WSAASyncSelect(),connect()便是非阻塞调用。进程发出连接请求后就不管了,当连接建立好后,WINSOCK.DLL自动发一条消息给主窗口函数,以使程序运行下去。 网络事件处理 窗口函数在收到UM_SOCK消息后,判断是由哪个网络事件引起的,第一次,必然是由连接事件引起的,这样,就会执行相应的程序段。同样,调用SetSelect()来提名FD_WRITE事件,希望在套接字可发送数据时接到消息。在收到FD_WRITE消息时,先调用send()发送数据,再调用SetSelect()来提名FD_READ事件, 希望在套接字可接收数据时接到消息。 在收到FD_READ消息时,先调用recv()来接收数据,再提名FD_WRITE事件。如此循环下去,直到发生连接关闭的事件FD_CLOS

文档评论(0)

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

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

1亿VIP精品文档

相关文档