摘要:摘自《Networking Programming for Microsoft Windows》第八章“完成端口”模型是迄今为止最为复杂的一种I/O模型。然而,假若一个应用程序同时需要管理为数众多的套接字,那么采用这种模型,往往可以达到最佳的系统性能!从本质上说,完成端口模型要求我们创建一个Win32完成端口对象,通过指定数量的线程,对重叠I/O请求进行管理,以便为已经完成的重叠I/O请求提供服务。使用这种模型之前,首先要创建一个I/O完成端口对象,用它面向任意数量的套接字句柄,管理多个I/O请求。要做到这一点,需要调用CreateCompletionPort函数。该函数定义如下:HANDLE
阅读全文
随笔分类 - windows
摘要:如果当前系统中支持高分辨率计数器,我们可以使用 QueryPerformanceCounter 和 QueryPerformanceFrequency 进行高分辨率的计时。QueryPerformanceFrequency()类型:Win32API原型:BOOL QueryPerformanceFrequency(LARGE_INTEGER *lpFrequency);作用:返回硬件支持的高精度计数器的频率。返回值:非零,硬件支持高精度计数器;零,硬件不支持,读取失败函数QueryPerformanceCounter用于得到高精度计时器的值(如果存在这样的计时器)原型:BOOL QueryPe
阅读全文
摘要:用记事本打开.sln文件,把如下内容:MicrosoftVisualStudioSolutionFile,FormatVersion10.00#VisualStudio2008改为MicrosoftVisualStudioSolutionFile,FormatVersion9.00#VisualStudio2005另外用记事本打开.vcproj这样的文件,把Version="9.00改为Version="8.00这样就可以用vs2005打开了其它版本之间的转换可以用类似方法解决
阅读全文
摘要:目的本来是这样的:有两个线程A,B。A在某个循环中等待线程B中的某个事件发生。比如在一个网络运用中,A是主线程,B是接收线程。A发送了一个请求到服务器,然后等待服务器返回响应或超时重发,当B接收到响应时通知A。先看如下代码:int main(){ HANDLE hMutex = CreateMutex(NULL, FALSE, NULL); WaitForSingleObject(hMutex, INFINITE); return 0;}WaitForSingleObject总是立即返回,为什么WaitForSingleObject没有起作用??原来是我理解错了,范了个低级错...
阅读全文
摘要:☛广播包的概念广播包通常为了如下两个原因使用:1 一个应用程序希望在本地网络中找到一个资源,而应用程序对于该资源的地址又没有任何先验的知识。 2 一些重要的功能,例如路由要求把它们的信息发送给所有找到的邻机。被广播信息的目的地址取决于这一信息将在何种网络上广播。Internet域中支持一个速记地址用于广播-INADDR_BROADCAST。由于使用广播以前必须捆绑一个数据报套接口,所以所有收到的广播消息都带有发送者的地址和端口。广播通信是无连接的通信,通信前不需要建立连接。不需要listen和accept,但需要绑定一个socket用来接收广播。☛广播包的发送创建socket设置socket,
阅读全文
摘要:利用winsock编写网络应用程序服务端的步骤简述如下WSAStartup 初始化网络编程库 socket 创建套接字 bind 指定地址、端口,绑定套接字 listen 进入监听状态 accept 等待接收新连接 send/recv 收发数据 closesocket 关键套接字 WSAStartup 释放对动态库的使用 下面详细介绍各API 1. Winsock初始化 调用int WSASta...
阅读全文
摘要:● 字节序的定义字节序,顾名思义字节的顺序,再多说两句就是大于一个字节的数据在内存中的存放顺序(一个字节的数据当然就无需谈顺序的问题)。在大部分的开发中我们不需要考虑字节序的问题。唯有在跨平台以及网络程序应用中字节序才是一个应该被考虑的问题。● 网络应用的字节序网络字节序是TCP/IP规定好的一种数据表示格式,它与具体的CPU类型、操作系统无关,从而可以保证数据在不同主机之间传输时能被正确解释。网络字节顺序采用big endian排序方式。在网络编程时,并不是什么时候都要考虑字节序问题。那么什么时候需要考虑呢?Intel CPU使用的都是little endian。实际上如果是应用层的数据,即
阅读全文
摘要:Windows网络编程使用winsock。Winsock是一个基于Socket模型的API,在Windows系统中广泛使用。使用Winsock进行网络编程需要包含头文件Winsock2.h,需要使用库ws2_32.lib,包含方法:可以使用语句来告诉编译器连接该库#pragma comment(lib, “ws2_32.lib”);如果使用VS,可以通过“项目” --> “XX属性”--> “连接...
阅读全文
摘要:当进程结束后所有线程都终止。多线程编程最大的问题在于共享数据的访问控制。直接用Win32 API进行编程有很多优点:基于Win32的应用程序执行代码小,运行效率高。但是它要求程序员编写的代码较多,且需要管理所有系统提供给程序的资源。▶创建线程HANDLE CreateThread( LPSECURITY_ATTRIBUTES lpThreadAttributes, // SD SIZE_T dwStackSize, // initial stack size LPTHREAD_START_ROUTINE lpStartAddress, // thread fu...
阅读全文

浙公网安备 33010602011771号