windows网络程序设计asp

&&&&Windows网络编程(第二版免费).pdf
Windows网络编程(第二版免费).pdf
第1章 Winsock简介
1.1 Winsock头文件及库文件
1.2 Winsock的初始化
1.3 错误检查和处理
1.4 协议寻址
1.5 创建套接字
1.6 面向连接的通信
1.6.1 服务器API函数
1.6.2 客户端API函数
1.6.3 数据传输
1.6.4 流协议
1.6.5 中断连接
1.7 无连接通信
1.7.1 接收端
1.7.2 发送端
1.7.3 基于消息的协议
1.7.4 释放套接字资源
1.8 其他API函数
1.8.1 getpeername
1.8.2 getsockname
1.8.3 WSADuplicateSocket
1.9 Windows CE
第2章 设计Winsock
2.1 系统体系结构
2.2 协议的特征
2.2.1 面向消息
2.2.2 面向流
2.2.3 伪流
2.2.4 面向连接和无连接
2.2.5 可靠性和有序性
2.2.6 正常关闭
2.2.7 广播数据
2.2.8 多播数据
2.2.9 服务质量
2.2.10 部分消息
2.2.11 路由选择的考虑
2.2.12 其他特征
2.3 Winsock编录
2.3.1 Winsock编录和Win64
2.3.2 创建套接字
第3章 网际协议
3.1.1 寻址
3.1.2 IPv4管理协议
3.1.3 Winsock中的IPv4寻址
3.2.1 寻址
3.2.2 IPv6管理协议
3.2.3 Winsock中的IPv6寻址
3.3 地址及名称解析
3.3.1 名称解析例程
3.3.2 简单的地址转换
3.3.3 传统名称解析例程
3.4 编写独立于IP版本的程序
3.4.1 客户机
3.4.2 服务器
第4章 Winsock支持的其他协议
4.1 红外线套接字
4.1.1 寻址
4.1.2 名称解析
4.1.3 红外线设备列举
4.1.4 查询IAS
4.1.5 创建套接字
4.1.6 套接字选项
4.2 IPX/SPX
4.2.1 寻址
4.2.2 创建套接字
4.3 NetBIOS
4.3.1 寻址
4.3.2 创建套接字
4.4 AppleTalk
4.4.1 寻址
4.4.2 创建套接字
4.5.1 寻址
4.5.2 创建套接字
4.5.3 把套接字和SAP绑定在一起
4.5.4 名称解析
第5章 Winsock I/0方法
5.1 套接字模式
5.1.1 阻塞模式
5.1.2 非阻塞模式
5.2 套接字I/O模型
5.2.1 阻塞模型
5.2.2 select模型
5.2.3 WSAAsyncSelect模型
5.2.4 WSAEventSelect模型
5.2.5 重叠模型
5.2.6 完成端口模型
5.3 I/O模型的问题
第6章 可伸缩的Winsock应用程序
6.1 API及可伸缩性
6.1.1 AcceptEx
6.1.2 GetAcceptExSockaddrs
6.1.3 TransmitFile
6.1.4 TransmitPackets
6.1.5 ConnectEx
6.1.6 DisconnectEx
6.1.7 WSARecvMsg
6.2 可伸缩的服务器体系结构
6.2.1 接受连接
6.2.2 数据传输
6.3 资源管理
6.4 服务器策略
6.4.1 高吞吐率
6.4.2 最大化连接数
6.4.3 性能指标
6.5 Winsock直连及套接字直连协议
第7章 套接字选项和I/0控制命令
7.1 套接字选项
7.1.1 SOL_SOCKET选项级别
7.1.2 SOL_APPLETALK选项级别
7.1.3 SOL_IRLMP选项级别
7.1.4 IPPROTO_IP选项级别
7.1.5 IPPROTO_IPV6选项级别
7.1.6 IPPROTO_RM选项级别
7.1.7 IPPROTO_TCP选项级别
7.1.8 NSPROTO_IPX选项级别
7.2 IOCTLSOCKET、WSAIOCTL和WSANSPloctl
7.2.1 标准I/O控制命令
7.2.2 其他I/O控制命令
7.2.3 加密套接字协议层的I/O控制命令
7.2.4 ATM I/O控制命令
第8章 名称注册和解析
8.1 背景知识
8.2 命名空间模型
8.3 服务的注册
8.3.1 安装服务类
8.3.2 服务的注册
8.3.3 服务注册示例
8.4 服务的查询
8.4.1 怎样查询服务
8.4.2 查询DNS
8.4.3 查询NLA
第9章 多播
9.1 多播的含义
9.2 IP多播
9.2.1 支持协议
9.2.2 用Setsockopt多播
9.2.3 用WSAIoctl多播
9.2.4 用WSAJoinLeaf多播
9.3 可靠多播
9.3.1 可靠发送者
9.3.2 可靠接收者
9.4 ATM多播
第10章 常规服务质量
10.1 背景知识
10.1.1 RSVP
10.1.2 网络组件
10.1.3 应用组件
10.1.4 策略组件
10.2 QOS和Winsock
10.2.1 QOS结构
10.2.2 QOS调用函数
10.3 终止QOS
10.4 QOS编程
10.4.1 RSVP和套接字类型
10.4.2 QOS通知
10.4.3 QOS模板
10.5.1 TCP
10.5.2 UDP
10.6 ATM和QOS
第11章 原始套接字
11.1 创建原始套接字
11.2.1 Ping示例
11.2.2 Traceroute示例
11.3 使用IP头包含选项
第12章 Winsock 2服务提供程序接口
12.1 分层服务提供程序
12.1.1 安装LSP
12.1.2 编写分层提供程序
12.1.3 调试 LSP
12.1.4 LSP示例
12.2 命名空间服务提供程序
12.2.1 命名空间的安装
12.2.2 命名空间的实现
12.2.3 命名空间提供程序示例
第13章 使用C#进行.NET套接字编程
13.2 寻址协议
13.3 名称解析
13.4 收发数据
13.5 异常处理
第14章 Visual Basic Winsock控件
14.4 UDP示例
14.4.1 发送UDP消息
14.4.2 接收UDP消息
14.4.3 获取Winsock信息
14.4.4 运行UDP示例
14.4.5 UDP状态
14.5 TCP示例
14.5.1 TCP服务器
14.5.2 TCP客户机
14.5.3 获取Winsock信息
14.5.4 运行TCP示例
14.5.5 TCP状态
14.6 存在的局限
14.7 常见错误
14.7.1 本地地址已被使用
14.7.2 当前状态下的无效操作
14.8 Windows CE的Winsock控件
14.8.1 Windows CE Winsock示例
14.8.2 已知的问题
第15章 远程访问服务
15.1 RAS客户机
15.2 编译和链接
15.3 数据结构和平台兼容性问题
15.4 DUN1.3升级和Windows 95
15.5 RASDIAL
15.5.1 同步模式
15.5.2 异步模式
15.5.3 关闭连接
15.6 电话簿
15.6.1 添加电话簿条目
15.6.2 删除电话簿条目
15.6.3 管理用户凭据
15.7 连接管理
第16章 IP助手函数
16.1 Ipconfig
16.1.1 释放和更新IPv4地址
16.1.2 改变IPv4地址
16.2 Netstat
16.2.1 取得TCP连接表
16.2.2 取得UDP监听者表
16.2.3 获取IP协议统计情况
16.3 Route
16.3.1 获得路由表
16.3.2 增加路由
16.3.3 删除路由
16.4.1 添加ARP条目
16.4.2 删除ARP条目
16.4.3 发送ARP请求
嵌到我的页面
<input type="text" readonly="true" value="">
若举报审核通过,可奖励20下载分
被举报人:
huangxiangbo316
举报的资源分:
请选择类型
资源无法下载
资源无法使用
标题与实际内容不符
含有危害国家安全内容
含有反动色情等内容
含广告内容
版权问题,侵犯个人或公司的版权
*详细原因:
VIP下载&&免积分60元/年(1200次)
您可能还需要
网络技术下载排行Windows网络编程_刘琰;王清贤;刘龙;_畅销正版电子书_热门电视剧原著_经典名著_好书推荐_免费在线读_免费下载_百度阅读
& 0手机专享价
扫码免费下载该书再送30元代金券
Windows网络编程
&&&&&&&&本书全面和系统地介绍了网络编程的基本原理,剖析了网络应用程序实现与套接字实现和协议实现之间的关联,重点阐述了WindowsSockets编程和WinPcap编程的主要思想、程序设计方法以及开发技巧和可能的陷阱,分析了不同编程方法的适用性和优缺点。&&&&&&&&本书系统性较强,内容丰富、结构清晰、论述严谨,既突出基本原理和技术思想,也强调工程实践,适合作为网络工程、信息安全、计算机应用、计算机软件、通信工程等专业的本科生教材,也可供从事网络工程、网络应用开发和网络安全等工作的技术人员参考。
&&&&&&&&编著者刘琰、王清贤、刘龙、陈熹。《Windows网络编程/高等院校信息安全专业规划教材》全面和系统地介绍了网络编程的基本原理,剖析了网络应用程序实现与套接字实现和协议实现之间的关联,重点阐述了WindowsSockets编程和WinPcap编程的主要思想、程序设计方法以及开发技巧和可能的陷阱,分析了不同编程方法的适用性和优缺点。《Windows网络编程/高等院校信息安全专业规划教材》系统性较强,内容丰富、结构清晰、论述严谨,既突出基本原理和技术思想,也强调工程实践,适合作为网络工程、信息安全、计算机应用、计算机软件、通信工程等专业的本科生教材,也可供从事网络工程、网络应用开发和网络安全等工作的技术人员参考。
目录(共14章)
投诉与建议
扫描下载客户端Windows网络编程的介绍_百度知道
Windows网络编程的介绍
我有更好的答案
hiphotos《Windows网络编程》是2011年人民邮电出版社出版的图书,作者是罗莉琴。
为您推荐:
您可能关注的推广
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁16151人阅读
&&&&&&&&&&&&& Windows
&&&&&&&&&&&&& Network Programming for Microsoft Windows 2nd
&&&&&&&&&&&&& Windows
&&&&&&&&&&&&&
&&&&&&&&&&&&& WindowsWindows 2000 Visual C++.NETC++
&&&&&&&&&&&&&
&&&&&&&&&&&&& UDPTCPUDPTCPUDPUDPTCP()UDPRFC
&&&&&&&&&&&&&
21 Window Socket
&&&&&&&&&&&&& Windows SocketUNIX Socket2.2WindowsWINSOCK2.HMSWSOCK.HWS2_32. LIBWSOCK32.LIB
&&&&&&&&&&&&& SocketI/OSelectWSAAsyncSelectWSAEventSelect IOI/OWSAAsyncSelect
&&&&&&&&&&&&& OK
1Windows Socket
7Windows Socket4
&&&&&&&&&&&&& CPUI/OCPICPUI/O
&&&&&&&&&&&&&
#include &winsock2.h&
void main(void)
&& WSADATA&&&&&&&&&&&&& wsaD
&& SOCKET&&&&&&&&&&&&&& ListeningS
&& SOCKET&&&&&&&&&&&&&& NewC
&& SOCKADDR_IN&&&&&&&&& ServerA
&& SOCKADDR_IN&&&&&&&&& ClientA
&& int&&&&&&& &&&&&&&&&&Port = 5150;
&&&// 初始化Windows Socket 2.2
&& WSAStartup(MAKEWORD(2,2), &wsaData);
&&&// 创建一个新的Socket来响应客户端的连接请求
&& ListeningSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
&& // 填写服务器地址信息
&& // 端口为5150
&& // IP地址为INADDR_ANY,注意使用htonl将IP地址转换为网络格式
&& ServerAddr.sin_family = AF_INET;
&& ServerAddr.sin_port = htons(Port);&&&
&&&ServerAddr.sin_addr.s_addr = htonl(INADDR_ANY);
&&&// 绑定监听端口
&& bind(ListeningSocket, (SOCKADDR *)&ServerAddr, sizeof(ServerAddr));
&& // 开始监听,指定最大同时连接数为5
& &&&&listen(ListeningSocket, 5);
&& // 接受新的连接
&& NewConnection = accept(ListeningSocket, (SOCKADDR *) &ClientAddr,&ClientAddrLen));
&& // 新的连接建立后,就可以互相通信了,在这个简单的例子中,我们直接关闭连接,
&& // 并关闭监听Socket,然后退出应用程序
&&&&&&closesocket(NewConnection);
&&&&& closesocket(ListeningSocket);
&& // 释放Windows Socket DLL的相关资源
&&&&& WSACleanup();
# include &winsock2.h&
void main(void)
&& WSADATA&&&&&&&&&&&&& wsaD
&& SOCKET&&&&&&&&&&&&&& s;
&& SOCKADDR_IN&&&&&&&&& ServerA
&& int&&&&&&&&&&&&&&&&& Port = 5150;
&&&//初始化Windows Socket 2.2
&& WSAStartup(MAKEWORD(2,2), &wsaData);
&&&// 创建一个新的Socket来连接服务器
&&&&& s = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
&&&// 填写客户端地址信息
&& // 端口为5150
&& // 服务器IP地址为&136.149.3.29&,注意使用inet_addr将IP地址转换为网络格式
&&&&&ServerAddr.sin_family = AF_INET;
&&&&& ServerAddr.sin_port = htons(Port);&&&
&&&&&&ServerAddr.sin_addr.s_addr = inet_addr(&136.149.3.29&);
&& // 向服务器发出连接请求
&&&&& connect(s, (SOCKADDR *) &ServerAddr, sizeof(ServerAddr));
&&&// 新的连接建立后,就可以互相通信了,在这个简单的例子中,我们直接关闭连接,
&& // 并关闭监听Socket,然后退出应用程序
&&&&& closesocket(s);
&& // 释放Windows Socket DLL的相关资源
&&&&& WSACleanup();
23 WSAAsyncSelect
&&&&&&&&&&&&& WindowsNetwork Programming for Microsoft Windows 2nd Pentium 4 1.7 GHz XeonCPU768M3PCPentium 2 233MHz 128 MB Pentium 2 350 MHz 128 MBItanium 733 MHz 1 GB
&&&&&&&&&&&&&
&&&&&&&&&&&&& Windows 98Windows 2000Windows XP,Overlapped I/OWindows 98WSAAsyncSelect
&&&&&&&&&&&&& 2.1
#define WM_SOCKET WM_USER + 1
#include &winsock2.h&
#include &windows.h&
int WINAPI WinMain(HINSTANCE hInstance,
&&&&HINSTANCE hPrevInstance, LPSTR lpCmdLine,
&&& int nCmdShow)
&&& WSADATA
&&& SOCKET L
&&& SOCKADDR_IN InternetA
&&& HWND W
&&& // 创建主窗口
&&& Window = CreateWindow();
&&& // 初始化Windows Socket 2.2
WSAStartup(MAKEWORD(2,2), &wsd);
// 创建监听Socket
&&& Listen = socket (AF_INET, SOCK_STREAM, IPPROTO_TCP);
&&& // 设置服务器地址
&&& InternetAddr.sin_family = AF_INET;
&&& InternetAddr.sin_addr.s_addr = htonl(INADDR_ANY);
&&& InternetAddr.sin_port = htons(5150);
&&& // 绑定Socket
&&& bind(Listen, (PSOCKADDR) &InternetAddr, sizeof(InternetAddr));
&&& // 设置Windows消息,这样当有Socket事件发生时,窗口就能收到对应的消息通知
// 服务器一般设置 FD_ACCEPT │ FD_READ | FD_CLOSE
// 客户端一般设置 FD_CONNECT │ FD_READ | FD_CLOSE
&&& WSAAsyncSelect(Listen, Window, WM_SOCKET, FD_ACCEPT │ FD_READ | FD_CLOSE);
&& // 开始监听
&& listen(Listen, 5);
&&& // Translate and dispatch window messages
&&& // until the application terminates
&&& while (1) {
&&&& // ...
BOOL CALLBACK ServerWinProc(HWND hDlg,UINT wMsg,
&&& WPARAM wParam, LPARAM lParam)
&&& SOCKET A
&&& switch(wMsg)
&&&&&&& case WM_PAINT:
&&&&&&&&&&& // Process window paint messages
&&&&&&&&&&&
&&&&&&& case WM_SOCKET:
&&&&&&&&&&& // Determine whether an error occurred on the
&&&&&&&&&&& // socket by using the WSAGETSELECTERROR() macro
&&&&&&&&&&& if (WSAGETSELECTERROR(lParam))
&&&&&&&&&&& {
&&&&&&&&&&&&&&&& // Display the error and close the socket
&&&&&&&&&&&&&&& closesocket( (SOCKET) wParam);
&&&&&&&&&&&&&&&
&&&&&&&&&&& }
&&&&&&&&&&& // Determine what event occurred on the
&&&&&&&&&&& // socket
&&&&&&&&&&& switch(WSAGETSELECTEVENT(lParam))
&&&&&&&&&&& {
&&&&&&&&&&&&&&& case FD_ACCEPT:
&&&&&&&&&&&&&&&&&&& // Accept an incoming connection
&&&&&&&&&&&&&&&&&&& Accept = accept(wParam, NULL, NULL);
& &&&&&&&&&&&&&&&&&&// Prepare accepted socket for read,
&&&&&&&&&&&&&&&&&&& // write, and close notification
&&&&&&&&&&&&&&&&&&& WSAAsyncSelect(Accept, hDlg, WM_SOCKET,
&&&&&&&&&&&&&&&&&&&&&&& FD_READ │ FD_WRITE │ FD_CLOSE);
&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&& case FD_READ:
&&&&&&&&&&&&&&&&&&& // Receive data from the socket in
&&&&&&&&&&&&&&&&&&& // wParam
&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&& case FD_WRITE:
&&&&&&&&&&&&&&&&&&& // The socket in wParam is ready
&&&&&&&&&&&&&&&&&&& // for sending data
&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&& case FD_CLOSE:
&&&&&&&&&&&&&&&&&&& // The connection is now closed
&&&&&&&&&&&&&&&&&&& closesocket( (SOCKET)wParam);
&&&&&&&&&&&&&&&&&&&
& &&&&&&&&&&}
&&&&&&&&&&&
&&& return TRUE;
&&&&&&&&&&&&& Windows
&&&&&&&&&&&&& CSDN.NETNetwork Programming for Microsoft Windows 2nd
&&&&&&&&&&&&& WSAAsyncSelect WSAEventSelect
&&&&&&&&&&&&& WSAAsyncSelectWSAAsyncSelectWindowsWSARecvWSARecvWSARecvWSARecv
&&&&&&&&&&&&& Per-handle Data
Per-I/O Operation Data Per-handle DataPer-Client handle DataPer-I/O Operation DataI/OI/O
&&&&&&&&&&&&& CreateIoCompletionPortNumberOfConcurrentThreadsWorker ThreadsNumberOfConcurrentThreadsWorker ThreadsNumberOfConcurrentThreadsCPUCPUWorker ThreadsWorker ThreadsWorker ThreadWorker ThreadWorker Thread
&&&&&&&&&&&&& Network Programming for Microsoft Windows 2nd
1.获得计算机信息,得到CPU的数量。创建一个完成端口,第四个参数置0,指定NumberOfConcurrentThreads为CPU个数。
2.Determine how many processors exist on the system.
3.Create worker threads to service completed I/O requests on the completion port using processor information in step 2. In the case of this simple example, we create one worker thread per processor because we do not expect our threads to ever get in a suspended condition in which there would not be enough threads to execute for each processor. When the CreateThread function is called, you must supply a worker routine that the thread executes upon creation. We will discuss the worker thread's responsibilities later in this section.
4.Prepare a listening socket to listen for connections on port 5150.
5.Accept inbound connections using the accept function.
6.Create a data structure to represent per-handle data and save the accepted socket handle in the structure.
7.Associate the new socket handle returned from accept with the completion port by calling CreateIoCompletionPort. Pass the per-handle data structure to CreateIoCompletionPort via the completion key parameter.
8.Start processing I/O on the accepted connection. Essentially, you want to post one or more asynchronous WSARecv or WSASend requests on the new socket using the overlapped I/O mechanism. When these I/O requests complete, a worker thread services the I/O requests and continues processing future I/O requests, as we will see later in the worker routine specified in step 3.
9.Repeat steps 5&8 until server terminates.
SocketWSAEventSelectWindows
Network Programming for Microsoft Windows 2nd
1.HANDLE CompletionP
3.SYSTEM_INFO SystemI
4.SOCKADDR_IN InternetA
5.SOCKET L
8.typedef struct _PER_HANDLE_DATA
10.& SOCKET&&&&&&&&& S
11.& SOCKADDR_STORAGE& ClientA
12.& // 在这里还可以加入其他和客户端关联的数据
13.} PER_HANDLE_DATA, * LPPER_HANDLE_DATA;
15.// 初始化Windows Socket 2.2
16.StartWinsock(MAKEWORD(2,2), &wsd);
18.// Step 1:
19.// 创建完成端口
21.CompletionPort = CreateIoCompletionPort(
22.&&& INVALID_HANDLE_VALUE, NULL, 0, 0);
24.// Step 2:
25.// 检测系统信息
27.GetSystemInfo(&SystemInfo);
29.// Step 3: 创建工作者线程,数量和CPU的数量一样多
30.// Create worker threads based on the number of
31.// processors available on the system. For this
32.// simple case, we create one worker thread for each
33.// processor.
35.for(i = 0; i & SystemInfo.dwNumberOfP i++)
37.&&& HANDLE ThreadH
39.&&& // Create a server worker thread, and pass the
40.&&& // completion port to the thread. NOTE: the
41.&&& // ServerWorkerThread procedure is not defined
42.&&& // in this listing.
44.&&& ThreadHandle = CreateThread(NULL, 0,
45.&&&&&&& ServerWorkerThread, CompletionPort,
46.&&&&&&& 0, NULL;
48.&&& // Close the thread handle
49.&&& CloseHandle(ThreadHandle);
52.// Step 4:
53.// 创建监听Socket
55.Listen = WSASocket(AF_INET, SOCK_STREAM, 0, NULL, 0,
56.&&& WSA_FLAG_OVERLAPPED);
58.InternetAddr.sin_family = AF_INET;
59.InternetAddr.sin_addr.s_addr = htonl(INADDR_ANY);
60.InternetAddr.sin_port = htons(5150);
61.bind(Listen, (PSOCKADDR) &InternetAddr,
62.&&& sizeof(InternetAddr));
64.// 开始监听
66.listen(Listen, 5);
68.while(TRUE)
70.&&& PER_HANDLE_DATA *PerHandleData=NULL;
71.&&& SOCKADDR_IN saR
72.&&& SOCKET A
73.&&& int RemoteL
74.&&& // Step 5: 等待客户端连接,然后将客户端Socket加入完成端口
75.&&& // Accept connections and assign to the completion
76.&&& // port
78.&&& RemoteLen = sizeof(saRemote);
79.&&& Accept = WSAAccept(Listen, (SOCKADDR *)&saRemote,
80.&&& &RemoteLen);
82.&&& // Step 6: 初始化客户端数据
83.&&& // Create per-handle data information structure to
84.&&& // associate with the socket
85.&&& PerHandleData = (LPPER_HANDLE_DATA)
86.&&&&&&& GlobalAlloc(GPTR, sizeof(PER_HANDLE_DATA));
88.&&& printf(&Socket number %d connected/n&, Accept);
89.&&& PerHandleData-&Socket = A
90.&&& memcpy(&PerHandleData-&ClientAddr, &saRemote, RemoteLen);
92.&&& // Step 7:
93.&&& // Associate the accepted socket with the
94. &&&// completion port
96.&&& CreateIoCompletionPort((HANDLE) Accept,
97.&&&&&&& CompletionPort, (DWORD) PerHandleData, 0);
99.&&& // Step 8: 发出对客户端的I/O请求,等待完成消息
100.&&&&//& Start processing I/O on the accepted socket.
101.&&&&//& Post one or more WSASend() or WSARecv() calls
102.&&&&//& on the socket using overlapped I/O.
103.&&&&WSARecv(...);
DWORD WINAPI ServerWorkerThread(LPVOID CompletionPortID)
&&& HANDLE CompletionPort = (HANDLE) CompletionPortID;
&&& DWORD BytesT
&&& LPOVERLAPPED O
&&&LPPER_HANDLE_DATA PerHandleD
&&& LPPER_IO_DATA PerIoD
&&& DWORD SendBytes, RecvB
&&& DWORD F
&&&&while(TRUE)
&&&&&&& // 等待完成端口消息,未收到消息德时候则阻塞线程
&&&&&&&&ret = GetQueuedCompletionStatus(CompletionPort,
&&&&&&&&&&& &BytesTransferred,(LPDWORD)&PerHandleData,
&&&&&&&&&&& (LPOVERLAPPED *) &PerIoData, INFINITE);
&&&&&&& // First check to see if an error has occurred
&&&&&&& // if so, close the
&&&&&&&&// socket and clean up the per-handle data
&&&&&&& // and per-I/O operation data associated with
&&&&&&& // the socket
&&&&&&& if (BytesTransferred == 0 &&
&&&&&&&&&&& (PerIoData-&OperationType == RECV_POSTED ││
&&&&&&&&&&&& PerIoData-&OperationType == SEND_POSTED))
&&&&&&&&&&& // A zero BytesTransferred indicates that the
&&&&&&&&&&& // socket has been closed by the peer, so
&&&&&&&&&&& // you should close the socket. Note:
&&&&&&&&&&&&// Per-handle data was used to reference the
&&&&&&&&&&& // socket associated with the I/O operation.
&&&&&&&&&&&&closesocket(PerHandleData-&Socket);
&&&&&&&&&&& GlobalFree(PerHandleData);
&&&&&&&&&&& GlobalFree(PerIoData);
&&&&&&&&&&&
&&&&&&& // Service the completed I/O request. You can
&&&&&&& // determine which I/O request has just
&&&&&&& // completed by looking at the OperationType
&&&&&&& // field contained in the per-I/O operation data.
&&&&&&&& if (PerIoData-&OperationType == RECV_POSTED)
&&&&&&&&&&& // Do something with the received data
&&&&&&&&&&& // in PerIoData-&Buffer
&&&&&&& // Post another WSASend or WSARecv operation.
&&&&&&& // As an example, we will post another WSARecv()
&&&&&&& // I/O operation.
&&&&&&& Flags = 0;
&&&&&&& // Set up the per-I/O operation data for the next
&&&&&&& // overlapped call
&&& &&&&ZeroMemory(&(PerIoData-&Overlapped),
&&&&&&&&&&& sizeof(OVERLAPPED));
&&&&&&& PerIoData-&DataBuf.len = DATA_BUFSIZE;
&&&&&&& PerIoData-&DataBuf.buf = PerIoData-&B
&&&&&&& PerIoData-&OperationType = RECV_POSTED;
&&&&&&& WSARecv(PerHandleData-&Socket,
&&&&&&&&&&&&&(PerIoData-&DataBuf), 1, &RecvBytes,
&&&&&&&&&&& &Flags, &(PerIoData-&Overlapped), NULL);
&&&&&&&&&&&&&
&&&&&&&&&&&&& Perhand-Data
&&&&&&&&&&&&& AresFTPFTP
&&&&&&&&&&&&& BUG
&&&&&&&&&&&&&
&&&&&&&&&&&&&
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:174451次
积分:2286
积分:2286
排名:第11476名
原创:26篇
转载:132篇
评论:32条
(1)(1)(1)(7)(4)(1)(1)(2)(1)(1)(2)(4)(6)(58)(10)(47)(9)(1)(1)第1章网络编程概述1.1网络编程模型1.1.1开放系统互连参考模型1.1.2TCP/IP协议栈模型1.1.3套接字编程模型1.1.4网间多线程会话模型1.2P2P网络模型1.2.1P2P的发展背景1.2.2三代P2P网络1.2.3P2P网络分类1.2.4P2P典型应用举例1.3Windows网络编程1.3.1Windows网络编程框架1.3.2Windows网络协议1.3.3Windows Sockets编程模型1.3.4WinSock2工作模式1.3.5第一个网络程序——hostent习题1第2章WinSock2 API编程2.1Win32 API窗体编程2.1.1弹出一个消息框2.1.2创建一个窗体2.1.3为窗体添加控件2.2WinSock2 API编程框架2.2.1WinSock2 API程序结构2.2.2WinSock2 API库函数2.2.3WinSock2的新发展2.3阻塞/非阻塞模式套接字编程2.3.1阻塞模式套接字客户机编程2.3.2阻塞模式套接字服务器编程2.3.3非阻塞模式套接字客户机编程2.3.4非阻塞模式套接字服务器编程2.3.5套接字错误处理2.4异步套接字编程2.4.1异步套接字客户机编程2.4.2异步套接字服务器编程2.4.3服务器响应多客户机的并发访问2...
直属事业部
扫描关注官方微博
扫描关注官方微信
版权所有(C)2014 清华大学出版社有限公司 京ICP备号 京公网安备48号}

我要回帖

更多关于 网络程序设计 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信