关闭

网络编程(58)—— Windows下使用CSocket搭建回声服务端和客户端

CSocket是对CAsyncSocket的一个再次封装,它将CAsyncSocket这种异步不阻塞的socket封装成了同步阻塞的socket。它的实现原理其实很简单,我们应该留意到在CAsyncSocket中Accept、Send、Receive函数被定义成了虚函数: virtual BOOL Accept( CAsyncSocket& rConnectedSocket, SOCKADDR*...
阅读(1252) 评论(0)

网络编程(57)—— Windows下使用CAsyncSocket搭建回声服务端和客户端

一、 引言         CAsyncSocket是MFC中对WSAAsyncSelect异步非阻塞通知IO的一个封装类。我们在《Windows下使用WSAAsyncSelect实现窗口处理socket消息》一文中讨论过WSAAsyncSelect的用法,知道它绑定一个窗口到一个socket,并注册了我们自定义的消息和需要监视的IO事件类型(FD_ACCEPT、FD_READ、FD_WRITE...
阅读(674) 评论(0)

网络编程(56)—— Windows下使用IOCP构建socket服务端

一、完成端口对象         不同于IO重叠对象在IO完成时通过触发事件或者触发CompletionRoutine回调函数,IOCP模型将socket和完成端口对象(CompletionPort,简称CP对象)绑定,当IO操作完成时,会改变该对象的状态,而我们通过完成端口对象,便可以确认IO操作是否完成。        创建完成端口对象的API如下: HANDLE WINAPI Crea...
阅读(646) 评论(0)

网络编程(55)—— Windows下使用WSASocket基于Completion Routine进行IO重叠

一、引言         上一文中我们介绍了使用基于事件进行IO重叠的方法,本文主要介绍另外一种,基于回调函数void CALLBACK CompletionRoutine(DWORD dwError,DWORDszRecvBytes,LPWSAOVERLAPPED lpOverlapped,DWORD flags)进行IO重叠。首先,我们先介绍一种线程的状态——alertable wait状态...
阅读(855) 评论(0)

网络编程(54)—— Windows下使用WSASocket基于事件进行IO重叠

一、引言         本文主要研究下Windows下的IO重叠技术。         何为IO重叠?按照它的定义,在同一个线程中,我们同时向多个目标socket发送数据或者从多个socket接收数据,而我们用于传递和接收的函数未等IO过程结束就返回,而数据的传递和接收工作完全交给了操作系统,在这个过程中针对目标socket的每个IO操作在时间片上都发生了重叠,这就是IO重叠,如下图所示:...
阅读(263) 评论(0)

网络编程(53)—— Windows下使用WSAAsyncSelect实现窗口处理socket消息

一、引言        上一文中我们介绍了使用WSAEventSelect实现异步通知IO的方法,本文我们主要讨论下使用WSAAsyncSelect处理socket的方法。本文的主要目标,是创建一个带界面的回声服务端,接收并返回客户端传过来的字符串,并在界面上显示该字符串。为此,我们将采用MFC的编程环境,建立如下的对话框程序: 二、WSAAsyncSelect函数       ...
阅读(899) 评论(0)

网络编程(52)—— Windows下使用WSAEventSelect实现异步通知IO

一、同步IO和异步IO         同步IO是指发生IO事件的时间点和相关函数返回的时间点一致。如使用send函数发送数据时,所有的数据发送到输出缓冲区后,send函数才会返回,这种IO方式就是同步IO。异步IO指函数先于IO事件返回。还是以send函数为例,调用send函数后其马上返回,而数据传送到输出缓冲区交给操作系统完成。这种IO方式就是同步IO。         什么是异步IO通知...
阅读(263) 评论(0)

网络编程(51)—— Windows下使用select进行IO复用

本文主要介绍在Windows系统下使用select搭建回声服务端的方法。在之前的《网络编程(16)—— IO复用技术之select》一文中我们介绍了在Linux使用Select进行IO复用的方法。本文对其原理不再详述,旨在通过对比使用加强对select的理解和应用。整个Windows版的select服务端的代码如下,稍后我们将对关键代码进行解释。 // SelectServ.cpp : 定义控制...
阅读(1007) 评论(0)

网络编程(50)—— 使用poll搭建回声服务端

一、 引言         本文主要介绍在linux中使用poll搭建回射服务端。我们在前面的文章中研究了使用select和epoll搭建服务端的方法。poll的用法和select类似,只不过用来描述操作符集合的是pollfd而非select的fd_set。Poll在Linux 2.5.44版本后被epoll取代,本文只为研究其用法。 二、函数原型 poll的函数原型如下: #includ...
阅读(651) 评论(0)

网络编程(49)—— epoll的条件触发和边缘触发

一、条件触发和边缘触发         在《网络编程(21)—— 使用epoll进行IO复用》一文中,我们介绍了在linux平台下使用epoll进行IO复用的方法。本文主要介绍epoll中进行IO复用的两种触发方式:条件触发和边缘触发。 1.1 什么是条件触发和边缘触发?        epoll进行IO复用的基本原理我们可以概括如下: 1、 使用epoll_create()创建用来保存e...
阅读(739) 评论(2)

网络编程(48)—— windows平台下的四种线程同步技术(二)

四、内核同步对象—— 互斥(Mutex)         内核线程同步对象包括互斥、信号量和事件,它们使用时存在很多共通之处。下面先介绍在Windows平台利用互斥进行线程的同步。 HANDLE WINAPI CreateMutex( __in_opt LPSECURITY_ATTRIBUTES lpMutexAttributes, __in BOOL bInitialOwner, __in_...
阅读(580) 评论(0)

网络编程(47)—— windows平台下的四种线程同步技术(一)

一、用户模式和内核模式         Windows操作系统在运行时,存在以下两种模式: 用户模式:是运行应用程序的基本模式,不能访问硬件,且访问的内存的范围也有限制。 内核模式:是操作系统运行的基本模式,可以访问硬件,访问的内存范围无限制。         Windows的程序在运行时,往往频繁的在用户模式和内核模式之间切换。以多线程程序为例,我们所创建的线程属于操作系统,在创建线...
阅读(713) 评论(0)

网络编程(46)—— windows内核对象的两种状态

一、 什么是内核对象?         我们知道进程、线程、文件、互斥、信号量这些都是操作系统级别的资源。我们在使用这些资源时,实际上都是由操作系统进行创建和管理的。操作系统为了管理这些资 源,会在其内部创建一个数据块,也可以理解为一个结构体对象。这个数据块就是内核对象。 二、 内核对象有哪两种状态?         内核对象的状态共有两种:signaled(有信号)状态和non-sign...
阅读(263) 评论(0)

网络编程(45)—— windows平台下销毁线程的四种方法

原文出自:http://www.cnblogs.com/goalone1985/articles/2126420.html 终止线程运行   若要终止线程的运行,可以使用下面的方法:   • 线程函数返回(最好使用这种方法)。   • 通过调用 ExitThread 函数,线程将自行撤消(最好不要使用这种方法)。   • 同一个进程或另一个进程中的线程调用 TerminateThre...
阅读(434) 评论(0)

网络编程(44)—— windows平台下创建线程的四种方法(三) 工作者线程和CWinThread线程类管理

四、AfxBeginThread 4.2 工作者线程         工作者线程类似我们之前介绍的用CreateThread创建的线程,它在后台处理数据,和主界面线程共享消息循环。它用AfxBeginThread的重载版本创建,函数原型如下: CWinThread* AfxBeginThread( AFX_THREADPROC pfnThreadProc, LPVOID pPar...
阅读(912) 评论(0)
58条 共4页1 2 3 4 下一页 尾页
    个人资料
    • 访问:371788次
    • 积分:6503
    • 等级:
    • 排名:第3964名
    • 原创:292篇
    • 转载:17篇
    • 译文:1篇
    • 评论:61条
    其它平台
    博客专栏