加入收藏 | 设为首页 | 会员中心 | 我要投稿 云计算网_泰州站长网 (http://www.0523zz.com/)- 视觉智能、AI应用、CDN、行业物联网、智能数字人!
当前位置: 首页 > 服务器 > 安全 > 正文

网络安全分析:非阻塞模式开发

发布时间:2021-06-03 05:21:20 所属栏目:安全 来源:互联网
导读:Winsock套接字的工作模式有两种,分别是阻塞模式(同步模式)和非阻塞模式(异步模式)。阻塞模式下的Winsock函数会将程序的某个线程(如果程序中只有一个主线程,那么会导致整个程序处于等待状态)处于等待状态。非阻塞模式的Winsock函数不会发生需要等待

Winsock套接字的工作模式有两种,分别是阻塞模式(同步模式)和非阻塞模式(异步模式)。阻塞模式下的Winsock函数会将程序的某个线程(如果程序中只有一个主线程,那么会导致整个程序处于“等待”状态)处于“等待”状态。非阻塞模式的Winsock函数不会发生需要等待的情况。在异步模式下,当一个函数执行后会立刻返回,即使是操作没有完成也会返回;当函数执行完成时,会以某种方式通知应用程序。显然,异步模式更适合于Windows下的开发。本文介绍异步模式的Winsock编程。

当一个套接字通过socket()函数创建后,默认工作在阻塞模式下。为了使得套接字工作在非阻塞模式状态下,就需要对套接字进行设置,将其改编为非阻塞模式。改变套接字工作模式的方法有多种,为了基于Windows应用程序的消息驱动机制,这里只介绍常用的改变套接字的函数。该函数是WSAAsyncSelect()函数,其定义如下:

int WSAAsyncSelect(  

 SOCKET s,  

 HWND hWnd,  

 unsigned int wMsg,

 long lEvent  

); 

WSAAsyncSelect()函数会把套接字设置为非阻塞模式,该函数会绑定指定套接字到一个窗口。当该套接字有网络事件发生时,会向绑定窗口发送相应的消息。该函数的参数含义说明如下。

S:指定要改变工作模式为非阻塞模式的套接字。

hWnd:指定当发生网络事件时接收消息的窗口。

wMsg:指定当网络事件发生时向窗口发送的消息。该消息是一个自定义消息,定义自定义消息的方法是在 WM_USER 的基础上加一个数值,比如(WM_USER + 1)。

lEvent:指定应用程序感兴趣的通知码。它可以被指定为多个通知码的组合。常用的通知码有 FD_READ(套接字收到对端发来的数据包)、FD_ACCEPT(监听中的套接字有连接请求)、FD_CONNECT(套接字成功连接到对方)和 FD_CLOSE(套接字对应的连接被关闭)。在指定通知码时不需要全部将其指定。对于基于 TCP 协议的客户端来说,FD_ACCEPT 是没有意义的;对于基于 TCP 的服务端来说,FD_CONNECT 是没有意义的;对于基于 UDP 协议的客户端和服务器端来说,FD_ACCEPT、FD_CONNECT 和 FD_CLOSE 都是没有意义的。

在了解如何将套接字设置为非阻塞模式以后,这里完成一个简单的远程控制工具。这里要编写的远程控制工具是基于C/S模式的,即客户端/服务器端模式的架构。客户端通过发送控制命令,操作服务器端接收到控制命令后响应相应的事件,完成特定的功能。

(编辑:云计算网_泰州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读