西电网络编程第3章范例.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
3.5.2 I/O控制命令   WinSock提供了一系列套接字I/O控制函数控制套接字的I/O行为,并获取套接字I/O操作的有关信息。其中最常用的是ioctlsocket函数,它可用于任一状态的任一套接字,而与具体协议或通信子系统无关。其原型为:   int ioctlsocket( SOCKET s, long cmd, u_long FAR* argp );   其中: (1)参数s是一个标识套接字的描述字; (2)参数cmd用于指定对套接字s的操作命令,标准的I/O控制命令如表3.3所示; (3)参数argp是指向cmd命令所带参数的指针。 表3.3 标准I/O控制命令 表3.3 标准I/O控制命令 习题与思考题   1. 什么是套接字?套接字可以分为哪几类?   2. 网间进程通信的目的是什么?   3. 客户机/服务器模式的工作流程是什么?   4. WinSock有哪两种编程模型?   5. 套接字的阻塞模式和非阻塞模式的含义是什么?   6. 一个具有服务质量功能的网络可以提供什么样的功能?   7. 客户机/服务器会话通信程序的步骤有哪些?   8. 数据报会话通信程序的步骤有哪些?      9. 根据客户机/服务器会话通信程序的步骤,编程实现一个简单的客户机/服务器实例。要求:服务器端建立一个套接字,绑定一个本地IP接口和端口,并监听客户机连接。在收到客户机连接请求之后,又建立一个新的套接字,再把这个新套接字投递到一个再生的客户机进程中。这个线程只读取数据,并把它发回客户机。客户机端建立一个套接字,并对投入应用的服务器名进行解析,然后与服务器建立连接。连接一旦建成,就可发送大量的消息了。每次发送数据之后,客户机都会等待服务器发回的回应,并把来自套接字的数据打印出来。   10. 根据数据报会话通信程序的步骤,编程实现一个简单的无连接服务实例。要求:接收端先建立一个套接字,然后把它和本地接口绑定在一起,之后便调用recvfrom读取接入的数据。而发送端要带有必不可少的参数IP地址和远程接收端的端口号,建立套接字后,利用sendto向接收端发送数据。   这样,应用程序就可引用事件数组中已传信的事件,并检索与那个事件对应的套接字,判断到底是在哪个套接字上,发生了什么网络事件类型。对事件数组中的事件进行引用时,应该用WSAWaitForMultipleEvents的返回值,减去预声明值WSA_WAIT_EVENT_0,得到具体的引用值(即索引位置)。例如:   Index= WSAWaitForMultipleEvents(...);   MyEvent=EventArray[Index- WSA_WAIT_EVENT_0];   知道了产生网络事件的套接字之后,可调用WSAEnumNet -workEvents函数了解发生的网络事件的类型。该函数原型为: int WSAEnumNetworkEvents( SOCKET s, WSAEVENT hEventObject, LPWSANETWORKEVENTS lpNetworkEent ); 其中: 参数s为标识套接字的描述字。 参数hEventObject是可选参数,用于标识需要重设的相应事件对象,由于事件对象处在一个“已传信”状态,所以可将它传入,令其自动成为“未传信”状态。如果不想用hEventObject参数来重设事件,可使用WSAResetEvent()函数。 参数lpNetworkEents是一个WSANETWORKEVENTS结构的数组,每一个元素记录了一个网络事件和相应的错误代码。 WSANETWORKEVENTS结构的格式为:   typedef struct_WSANETWORKEVENTS   { long lNetworkEvents;    int iErrorCodes[FD_MAX_EVENTS];   }; 其中:   参数lNetworkEvents用于指定套接字上发生的所有网络事件类型。   参数iErrorCodes指定的是一个错误代码数组,同lNetworkEvents中的事件关联在一起。针对每个网络事件类型,都存在着一个特殊的事件索引,名字与事件类型的名字类似,只是要在事件名字后添加一个“_BIT”后缀字串即可。如对FD_READ事件类型来说,iErrorCodes数组的索引标识符便是FD

文档评论(0)

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

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

1亿VIP精品文档

相关文档