网络编程 WsaasyncSelect 中要响应多个客户端的连接和传输问题,高手讨论

NoImagination 2008-07-04 10:56:23
要用到多线程吧,网上资料很少,多线程的都是 事件模型 的。
最重要的是
1,怎么保存和每个客户端通讯的套接字?用列表保存吗?
2,如果每个客户端起个线程,线程函数可以重入吗?
3,从什么地方起线程呢?

LRESULT CTPServerDlg::OnSock(WPARAM wParam,LPARAM lParam)
{
SOCKET socketAccept;

if(WSAGETSELECTERROR(lParam))
return 0;
switch(WSAGETSELECTEVENT(lParam))
{
case FD_ACCEPT:
socketAccept=accept(m_socketSrv,NULL,NULL);
if(socketAccept==SOCKET_ERROR)
{
return 0;
}
if(SOCKET_ERROR==WSAAsyncSelect(socketAccept,m_hWnd,UM_SOCK,FD_READ|FD_CLOSE))
{
return 0;
}
break;
case FD_READ:
//DWORD dwThreadId;
AfxBeginThread((AFX_THREADPROC)ReadThread,&wParam);

break;
case FD_CLOSE:
closesocket((SOCKET)wParam);
break;
default:
break;
}
return 1;
}

UINT ReadThread(LPVOID pParam)
{
return 0;
}

这是个框架代码,高手一定要指点。
...全文
223 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
NoImagination 2008-07-07
  • 打赏
  • 举报
回复
CodeRunner : thank you all the same.
CodeRunner 2008-07-05
  • 打赏
  • 举报
回复
网上有一个TCP的测试工具源码(TCPNetKit)可以解决你提到的问题.
NoImagination 2008-07-05
  • 打赏
  • 举报
回复
向(上面的错别字)
NoImagination 2008-07-05
  • 打赏
  • 举报
回复
在这里,我非常感谢 WinEggDrop 的答复。
像无私的高手致敬。
zatman 2008-07-05
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 WinEggDrop 的回复:]
引用 11 楼 NoImagination 的回复:
引用 10 楼 WinEggDrop 的回复:
引用 7 楼 NoImagination 的回复:
其实 这种io模型性能差的很,但它似乎最简单(比select还要简单)所以拿他入手了。


"性能差的很"
商用的FTP服务软件Serv-U用的就是这个模型,在没BT前,国内的FTP服务器95%是用Serv-U的,就算是现在,FTP服务软件,用最多的也是Serv-U,象很多虚拟主机,都用它.

"但它似乎最简单(比select还要简单)"
自己写一个没问题的不…
[/Quote]

碰上牛人了哈~
ok1234567 2008-07-04
  • 打赏
  • 举报
回复
1、应该有一个客户端的类,比如:CClient,用来维护全部的客户的添加、修改、删除、验证等操作,最核心的是维护一个客户列表
当然,客户可以简单地定义为一个结构: CLIENT,在该结构中,维护一个CMySocket的指针,当为NULL时,不可用,否则重入时需要进行CMySocket的清理工作
2、接受客户端连接请求后,产生的一个客户端连接支持类CMySocket,以一个独立的线程运行,处理FD_READ|FD_WRITE|FD_CLOSE事件
显然,CMySocket里面一定有两个重要的成员:SOCKET s和CLIENT *pClient(验证通过后指向客户结构数据的指针),客户数据和套节字类互相包含关联指针
3、自定义的协议中需要包含一个ACTIVE的数据请求,测试连接是否有效

基本流程:
客户端请求连接
进入验证流程(查询客户),验证失败,close,验证通过,互相设置指针(也可能需要清理该客户原有的指针)
开始客户线程,通信,无通信时按某种时间策略发送测试包ACTIVE
客户端发现连接中断,则自重尝试重新连接
服务器发现客户端连接中断,则清理CMySocket和CLIENT
....
scq2099yt 2008-07-04
  • 打赏
  • 举报
回复
up
S0303828 2008-07-04
  • 打赏
  • 举报
回复

用WSAAsyncSelect就不用多线程了
首先WSAAsyncSelect(Listen,hWnd,WM_SOCKET,FD_ACCEPT|FD_CLOSE);
然后自定义消息#define WM_SOCKET (WM_USER + 1) 当有发生Listen套接字有发生CLIENT连接就触发ONsocket
1.可以用CList保存自定义个一个结构体
如class CDat
{
public:
CDat();
virtual ~CDat();
public:
SOCKET iSocket; //与Client连接的SOCKET
int iLen;
char strData[MAX_LEN]; //内容
};
然后
m_List.AddTailObj( ExhcgDat); //保存到CList
下次再有Client连过来只要遍历这个LIST就可以找到Socket了。
cnzdgs 2008-07-04
  • 打赏
  • 举报
回复
如果用多线程,就不需要WSAAsyncSelect了。
套接字怎么保存都可以。线程没有重入一说,同一个函数可以被任意线程调用任意次,启动多个线程可以是同一个开始地址。
WinEggDrop 2008-07-04
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 NoImagination 的回复:]
还有一个问题,WsaAsyncSelect模型最多支持多少客户端上来的连接?
[/Quote]

WsaAsyncSelect模型能处理的客户,不受模型限制,是受系统资源限制.就算是IOCP,也是受系统资源限制,没有一个模型是不受这个限制的.在实际环境中,我用WsaAsyncSelect模型写的游戏socks5代理程序,最高是处理过1000多客户连接,不能处理更多不是系统的CPU,内存等资源不足,而是那个服务器的带宽不足,1000多客户已经用了近3MB带宽(接近25Mbps)
WinEggDrop 2008-07-04
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 NoImagination 的回复:]
引用 10 楼 WinEggDrop 的回复:
引用 7 楼 NoImagination 的回复:
其实 这种io模型性能差的很,但它似乎最简单(比select还要简单)所以拿他入手了。


"性能差的很"
商用的FTP服务软件Serv-U用的就是这个模型,在没BT前,国内的FTP服务器95%是用Serv-U的,就算是现在,FTP服务软件,用最多的也是Serv-U,象很多虚拟主机,都用它.

"但它似乎最简单(比select还要简单)"
自己写一个没问题的不算复杂的程序出来,象TCP数据转…
[/Quote]

对于使用什么模型的讨论,是以实际环境为背景的.很多商用软件用的还是一个客户用一个线程处理的多线程阻塞模型.国产的ccproxy,还有学校,政府机构,小型企业等在用,一样是多线程阻塞模型的,国产的共享软件Crob FTP服务器等,一样是这个模型的,只要实际中程序能稳定,并能很好的解决问题,这已经是足够的了.很多人开口IOCP,闭口IOCP,但如果要处理的请求用所谓最差的一个模型(每个请求用一个线程处理的阻塞模型),和用IOCP模型写的在实际应用中无论性能,对资源要求等都没有显著的分别的话,我不觉得花更多时间用IOCP模型写有什么好处.

IOCP的高性能是在处理大量请求的背景下的,所谓大量请求,那是至少5000个客户连接的数量.如果你的应用程序最高也不会处理这么多请求的话,那么除非想提高自己对IOCP的理解,不然我不认为有什么必要一定要用IOCP,如果要打个比喻的话,IOCP就好象是火车,其它模型是一般的轿车到卡车,如果一般轿车都能装得下的货物,你硬要用火车去运,那是"大材小用".

在项目经理眼中,根本是没有好模型,差模型.只要项目能按进度完成,能稳定运行,不会出现什么问题,好这就已经是最好的模型.而以纯技术方面去讨论模型的好差,只能是开发两个一模一样的软件,使用不同模型,在相同的实际环境中测试运行,调试测试得到的数据,才可以说哪个模型在处理这个问题时的优劣.
NoImagination 2008-07-04
  • 打赏
  • 举报
回复
还有一个问题,WsaAsyncSelect模型最多支持多少客户端上来的连接?
WinEggDrop 2008-07-04
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 NoImagination 的回复:]
引用 10 楼 WinEggDrop 的回复:
引用 7 楼 NoImagination 的回复:
其实 这种io模型性能差的很,但它似乎最简单(比select还要简单)所以拿他入手了。


"性能差的很"
商用的FTP服务软件Serv-U用的就是这个模型,在没BT前,国内的FTP服务器95%是用Serv-U的,就算是现在,FTP服务软件,用最多的也是Serv-U,象很多虚拟主机,都用它.

"但它似乎最简单(比select还要简单)"
自己写一个没问题的不算复杂的程序出来,象TCP数据转…
[/Quote]

无论反汇编还是用一些监视软件使用的API方法,都能知道大致使用模式.反汇编可以看到更多东西(如果很仔细地一直反下去的话)
NoImagination 2008-07-04
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 WinEggDrop 的回复:]
引用 7 楼 NoImagination 的回复:
其实 这种io模型性能差的很,但它似乎最简单(比select还要简单)所以拿他入手了。


"性能差的很"
商用的FTP服务软件Serv-U用的就是这个模型,在没BT前,国内的FTP服务器95%是用Serv-U的,就算是现在,FTP服务软件,用最多的也是Serv-U,象很多虚拟主机,都用它.

"但它似乎最简单(比select还要简单)"
自己写一个没问题的不算复杂的程序出来,象TCP数据转发程序什么的,用select和WSAAsync…
[/Quote]

请教 2 个问题
1,你怎么知道哪个软件用了什么技术?我真不知道怎么判断。(虚心请教,绝非其他意思)
2,我没测试过,因为我刚用这技术,但我觉得你除非把select模型故意做的不如wnd select 模型,从理论上来讲,后者的性能应该比较差。

我实在水平低,要不我非测试测试,我甚至不知如何考察他们的性能。记下了,熟练了测试。
另外,我觉得 完成端口仅仅被nt和2000支持实在是不爽,你知道,现在服务器方面window 平台我觉得市场占有率还是不多的,即使多。xnix 平台下是如何实现大规模响应的呢?select + 多线程?还望指教。

是不是开发到具备一定水平的时候,可以忽略这种模型那种模型的,只考虑模式就可以了?还是自己封装东西?
引个路啊,实在无人可探讨....

我的理念:遇到高手一个都不放过!!
WinEggDrop 2008-07-04
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 NoImagination 的回复:]
其实 这种io模型性能差的很,但它似乎最简单(比select还要简单)所以拿他入手了。
[/Quote]

"性能差的很"
商用的FTP服务软件Serv-U用的就是这个模型,在没BT前,国内的FTP服务器95%是用Serv-U的,就算是现在,FTP服务软件,用最多的也是Serv-U,象很多虚拟主机,都用它.

"但它似乎最简单(比select还要简单)"
自己写一个没问题的不算复杂的程序出来,象TCP数据转发程序什么的,用select和WSAAsyncSelect模式各写一个,到时实际测试看下再说.
NoImagination 2008-07-04
  • 打赏
  • 举报
回复
to:S0303828

客户端的socket过来,保存之前是个局部变量可以吗,
如:
{
SOCKET socketAccept;
case FD_ACCEPT:
socketAccept=accept(m_socketSrv,NULL,NULL);
if(socketAccept==SOCKET_ERROR)
{
return 0;
}
if(SOCKET_ERROR==WSAAsyncSelect(socketAccept,m_hWnd,UM_SOCK,FD_READ|FD_CLOSE))
{
return 0;
}
m_list.addItem(socketAccept);//这里
break;
}
高山-流水 2008-07-04
  • 打赏
  • 举报
回复
可以用,完成端口,多线程
NoImagination 2008-07-04
  • 打赏
  • 举报
回复
其实 这种io模型性能差的很,但它似乎最简单(比select还要简单)所以拿他入手了。
NoImagination 2008-07-04
  • 打赏
  • 举报
回复
1 楼和 2 楼的答复
你们刚好可以互相印证。thanks
NoImagination 2008-07-04
  • 打赏
  • 举报
回复
感谢大家在我看来极具价值的回复 和 各类的 up

TO:ok1234567

你说的有些麻烦,可能封装一次以后会有用途,但我现在的水平,实在要和你说声抱歉。
第 1章 概述 1 1.1 网络编程相关的基本概念 1 1.1.1 网络编程与进程通信 1 1.1.2 Internet中网间进程的标识 3 1.1.3 网络协议的特征 7 1.2 三类网络编程 10 1.2.1 基于TCP/IP协议栈的网络编程 10 1.2.2 基于WWW应用的网络编程 10 1.2.3 基于.NET框架的Web Services网络编程 10 1.3 客户机/服务器交互模式 13 1.3.1 网络应用软件的地位和功能 13 1.3.2 客户机/服务器模式 14 1.3.3 客户机与服务器的特性 15 1.3.4 容易混淆的术语 16 1.3.5 客户机与服务器的通信过程 16 1.3.6 网络协议与C/S模式的关系 17 1.3.7 错综复杂的C/S交互 17 1.3.8 服务器如何同时为多个客户机服务 18 1.3.9 标识一个特定服务 20 1.4 P2P模式 21 1.4.1 P2P技术的兴起 21 1.4.2 P2P的定义和特征 21 1.4.3 P2P的发展 22 1.4.4 P2P的关键技术 22 1.4.5 P2P系统的应用与前景 22 习题 23 第 2章 套接字网络编程基础 24 2.1 套接字网络编程接口的产生与发展 24 2.1.1 问题的提出 24 2.1.2 套接字编程接口起源于UNIX操作系统 25 2.1.3 套接字编程接口在Windows和Linux操作系统中得到继承和发展 25 2.1.4 套接字编程接口的两种实现方式 25 2.1.5 套接字通信与UNIX操作系统的输入/输出的关系 26 2.2 套接字编程的基本概念 27 2.2.1 什么是套接字 27 2.2.2 套接字的特点 28 2.2.3 套接字的应用场合 30 2.2.4 套接字使用的数据类型和相关的问题 30 2.3 面向连接的套接字编程 32 2.3.1 可靠的传输控制协议 32 2.3.2 套接字的工作过程 33 2.3.3 面向连接的套接字编程实例 34 2.3.4 进程的阻塞问题和对策 40 2.4 无连接的套接字编程 43 2.4.1 高效的用户数据报协议 43 2.4.2 无连接的套接字编程的两种模式 43 2.4.3 数据报套接字的对等模式编程实例 45 2.5 原始套接字 47 2.5.1 原始套接字的创建 47 2.5.2 原始套接字的使用 48 2.5.3 原始套接字应用实例 49 习题 51 第3章 WinSock编程 53 3.1 WinSock概述 53 3.2 WinSock库函数 55 3.2.1 WinSock的注册与注销 55 3.2.2 WinSock的错误处理函数 58 3.2.3 主要的WinSock函数 61 3.2.4 WinSock的辅助函数 74 3.2.5 WinSock的信息查询函数 77 3.2.6 WSAAsyncGetXByY类型的扩展函数 79 3.3 网络应用程序的运行环境 82 习题 84 第4章 MFC编程 85 4.1 MFC概述 85 4.1.1 MFC是一个编程框架 85 4.1.2 典型的MDI应用程序的构成 87 4.2 MFC和Win32 89 4.2.1 MFC对象和Windows对象的关系 89 4.2.2 几个主要的类 91 4.3 CObject类 95 4.3.1 CObject类的定义 95 4.3.2 CObject类的特性 96 4.4 消息映射的实现 98 4.5 MFC对象的创建 102 4.5.1 MFC对象的关系 102 4.5.2 MFC提供的接口 104 4.5.3 MFC对象的创建过程 104 4.6 应用程序的退出 107 习题 107 第5章 MFC WinSock类的 编程 109 5.1 CAsyncSocket类 110 5.1.1 使用CAsyncSocket类的一般步骤 110 5.1.2 创建CAsyncSocket类对象 111 5.1.3 关于CAsyncSocket类可以接受并处理的消息事件 112 5.1.4 客户端套接字对象请求连接到服务器端套接字对象 114 5.1.5 服务器接收客户机的连接请求 115 5.1.6 发送与接收流式数据 116 5.1.7 关闭套接字 118 5.1.8 错误处理 118 5.1.9 其他成员函数 119 5.2 CSocket类 120 5.2.1 创建CSocket对象 120 5.2.2 建立连接 120 5.2.3 发送和接收数据 120 5.2.4 CSocket类、CArchive类和CSocketFile类 121 5.2.5 关闭套接字和清除相关的对象 122 5.3 CSocket类的编程模型 122 5.4 用CAsyncSocket类实现聊天室程序 123 5.4.1 实现目标 123 5.4.2 创建客户端应用程序 124 5.4.3 客户端程序的类与消息驱动 134 5.4.4 客户端程序主要功能的代码和分析 135 5.4.5 创建服务器端程序 142 5.4.6 服务器端程序的流程和消息驱动 144 5.4.7 点对点交谈的服务器端程序主要功能的代码和分析 145 5.5 用CSocket类实现聊天室程序 151 5.5.1 聊天室程序的功能 151 5.5.2 创建聊天室的服务器端程序 151 5.5.3 聊天室服务器端程序的主要实现代码和分析 154 5.5.4 创建聊天室的客户端程序 162 5.5.5 聊天室客户端程序的主要实现代码和分析 163 习题 170 实验 170 第6章 WinInet编程 172 6.1 MFC WinInet类 172 6.1.1 概述 172 6.1.2 MFC WinInet所包含的类 173 6.1.3 使用WinInet类编程的一般步骤 174 6.1.4 创建CInternetSession类对象 175 6.1.5 查询或设置Internet请求选项 176 6.1.6 创建连接类对象 177 6.1.7 使用文件检索类 178 6.1.8 重载OnStatusCallback函数 179 6.1.9 创建并使用网络文件类对象 180 6.1.10 CInternteException类 183 6.2 用MFC WinInet类实现FTP客户端 183 6.2.1 程序要实现的功能 183 6.2.2 创建应用程序的过程 184 习题 186 实验 187 第7章 WinSock的多线程 编程 188 7.1 WinSock为什么需要多线程编程 188 7.1.1 WinSock的两种I/O模式 188 7.1.2 两种模式的优缺点及解决方法 189 7.2 Win32操作系统下的多进程多线程机制 189 7.2.1 Win32 OS是单用户多任务的操作系统 189 7.2.2 Win32 OS是支持多线程的操作系统 190 7.2.3 多线程机制在网络编程中的应用 191 7.3 VC++对多线程网络编程的支持 192 7.3.1 MFC支持的两种线程 192 7.3.2 创建MFC的工作线程 193 7.3.3 创建并启动用户界面线程 195 7.3.4 终止线程 198 7.4 多线程FTP客户端实例 200 7.4.1 编写线程函数 200 7.4.2 添加事件处理函数 206 习题 208 第8章 WinSock的I/O模型 209 8.1 select模型 210 8.2 WSAAsyncSelect异步I/O模型 212 8.3 WSAEventSelect事件选择模型 216 8.4 重叠I/O模型 221 8.4.1 重叠I/O模型的优点 221 8.4.2 重叠I/O模型的基本原理 221 8.4.3 重叠I/O模型的关键函数和数据结构 222 8.4.4 使用事件通知实现重叠模型的步骤 225 8.4.5 使用完成例程实现重叠模型的步骤 227 8.5 完成端口模型 229 8.5.1 什么是完成端口模型 229 8.5.2 使用完成端口模型的方法 230 习题 238 第9章 HTTP及编程 239 9.1 HTTP 239 9.1.1 HTTP的背景 239 9.1.2 HTTP的内容 240 9.1.3 HTTP消息的一般格式 242 9.1.4 HTTP请求的格式 243 9.1.5 HTTP响应的格式 245 9.1.6 访问认证 248 9.1.7 URL编码 249 9.1.8 HTTP的应用 250 9.2 利用CHtmlView类创建Web浏览器型的应用程序 250 9.2.1 CHtmlView类与WebBrowser控件 250 9.2.2 CHtmlView类的成员函数 251 9.2.3 创建一个Web浏览器型的应用程序的一般步骤 256 9.3 Web浏览器应用程序实例 261 9.3.1 程序实现的目标 261 9.3.2 创建实例程序 262 习题 265 实验 265 第 10章 电子邮件协议与编程 267 10.1 电子邮件系统的工作原理 267 10.1.1 电子邮件的特点 267 10.1.2 电子邮件系统的构成 267 10.1.3 电子邮件系统的实现 268 10.2 简单邮件传送协议 270 10.2.1 概述 270 10.2.2 SMTP客户机与SMTP服务器之间的会话 270 10.2.3 常用的SMTP命令 271 10.2.4 常用的SMTP响应码 273 10.2.5 SMTP的会话过程 274 10.2.6 使用WinSock来实现电子邮件客户机与服务器的会话 274 10.3 电子邮件信件结构详述 275 10.3.1 Internet文本信件的格式标准——RFC 822 275 10.3.2 信件的头部 276 10.3.3 构造和分析符合RFC 822标准的电子信件 281 10.4 MIME编码解码与发送附件 281 10.4.1 MIME概述 281 10.4.2 MIME定义的新的信头字段 282 10.4.3 MIME邮件的内容类型 283 10.4.4 MIME邮件的编码方式 292 10.5 POP3与接收电子邮件 294 10.5.1 POP3 294 10.5.2 POP3的会话过程 294 10.5.3 POP3会话的3个状态 295 10.5.4 POP3标准命令 296 10.5.5 接收电子邮件的一般步骤 298 10.6 接收电子邮件的程序实例 299 10.6.1 实例程序的目的和实现的技术要点 299 10.6.2 创建应用程序的过程 301 10.7 发送电子邮件的程序实例 302 10.7.1 实例程序的目的和实现的技术要点 302 10.7.2 创建应用程序的过程 303 习题 305 参考文献 307
《Windows Sockets网络编程》是WindowsSockets网络编程领域公认的经典著作,由Windows Sockets2.0规范解释小组负责人亲自执笔,权威性毋庸置疑。它结合大量示例,对WindowsSockets规范进行了深刻地解读,系统讲解了WindowsSockets网络编程及其相关的概念、原理、主要命令、操作模式,以及开发技巧和可能的陷阱,从程序员的角度给出了大量的建议和最佳实践,是学习WindowsSockets网络编程不可多得的参考书。   全书分为三部分:第一部分(第1~6章),提供了翔实的背景知识和框架方面的概念,借助于此框架,读者可理解WinSock的具体细节,包括WindowsSockets概述、OSI网络参考模型、TCP/IP协议簇中的协议和可用的服务、WinSock网络应用程序的框架及其工作机制、WinSock的三种操作模式、socket通信机制等;第二部分(第7~12章),以FTP客户端实例为基础介绍了函数实例库,还介绍了客户端程序、服务器程序和DLL中间构件及它们的相应函数,并涵盖socket命令和选项及移植BSDSockets相关事项等;第三部分(第13~17章),介绍了应用程序调试技术和工具,针对应用编程中的陷阱的建议和措施,WinSockAPI的多种操作系统平台,WinSock规范的可选功能和WinSock规范2.0中的所有新功能。 译者序 序 前言 第1章 Windows Sockets概述 1.1 什么是Windows Sockets 1.2 Windows Sockets的发展历史 1.3 Windows Sockets的优势 1.3.1 Windows Sockets是一个开放的标准 1.3.2 Windows Sockets提供源代码可移植性 1.3.3 Windows Sockets支持动态链接 1.3.4 Windows Sockets的优点 1.4 Windows Sockets的前景 1.5 结论 第2章 Windows Sockets的概念 2.1 OSI网络模型 2.2 WinSock网络模型 2.2.1 信息与数据 2.2.2 应用协议 2.3 WinSock中的OSI层次 2.3.1 应用层 2.3.2 表示层 2.3.3 会话层 2.3.4 传输层 2.3.5 网络层 2.3.6 数据链路层 2.3.7 物理层 2.4 模块化的层次框 2.5 服务和协议 2.6 协议和API 第3章 TCP/IP协议服务 3.1 什么是TCP/IP 3.2 TCP/IP的发展历史 3.3 传输服务 3.3.1 无连接的服务:UDP 3.3.2 面向连接的服务:TCP 3.3.3 传输协议的选择:UDP与TCP的对比 3.4 网络服务 3.4.1 IP服务 3.4.2 ICMP服务 3.5 支持协议和服务 3.5.1 域名服务 3.5.2 地址解析协议 3.5.3 其他支持协议 3.6 TCP/IP的发展前景 第4章 网络应用程序工作机制 4.1 客户端-服务器模型 4.2 网络程序概览 4.3 socket的打开 4.4 socket的命名 4.4.1 sockaddr结构 4.4.2 sockaddr_in结构 4.4.3 端口号 4.4.4 本地IP地址 4.4.5 什么是socket名称 4.4.6 客户端socket名称是可选的 4.5 与另一个socket建立关联 4.5.1 服务器如何准备建立关联 4.5.2 客户端如何发起一个关联 4.5.3 服务器如何完成一个关联 4.6 socket之间的发送与接收 4.6.1 在“已连接的”socket上发送数据 4.6.2 在“无连接的”socket上发送数据 4.6.3 接收数据 4.6.4 socket解复用器中的关联 4.7 socket的关闭 4.7.1 closesocket 4.7.2 shutdown 4.8 客户端和服务器概览 第5章 操作模式 5.1 什么是操作模式 5.1.1 不挂机,等待:阻塞 5.1.2 挂机后再拨:非阻塞 5.1.3 请求对方回拨:异步 5.2 阻塞模式 5.2.1 阻塞socket 5.2.2 阻塞函数 5.2.3 伪阻塞的问题 5.2.4 阻塞钩子函数 5.2.5 阻塞情境 5.2.6 撤销阻塞操作 5.2.7 阻塞操作中的超时 5.2.8 无最少接收限制值 5.2.9 代码示例 5.3 非阻塞模式 5.3.1 怎样使socket成为非阻塞的 5.3.2 成功与失败不是绝对的 5.3.3 探询而非阻塞 5.3.4 显式地避让 5.3.5 代码示例 5.4 异步模式 5.4.1 认识异步函数 5.4.2 撤销异步操作 5.4.3 代码示例 5.4.4 AU_T
《Windows Sockets网络编程》是WindowsSockets网络编程领域公认的经典著作,由Windows Sockets2.0规范解释小组负责人亲自执笔,权威性毋庸置疑。它结合大量示例,对WindowsSockets规范进行了深刻地解读,系统讲解了WindowsSockets网络编程及其相关的概念、原理、主要命令、操作模式,以及开发技巧和可能的陷阱,从程序员的角度给出了大量的建议和最佳实践,是学习WindowsSockets网络编程不可多得的参考书。   全书分为三部分:第一部分(第1~6章),提供了翔实的背景知识和框架方面的概念,借助于此框架,读者可理解WinSock的具体细节,包括WindowsSockets概述、OSI网络参考模型、TCP/IP协议簇中的协议和可用的服务、WinSock网络应用程序的框架及其工作机制、WinSock的三种操作模式、socket通信机制等;第二部分(第7~12章),以FTP客户端实例为基础介绍了函数实例库,还介绍了客户端程序、服务器程序和DLL中间构件及它们的相应函数,并涵盖socket命令和选项及移植BSDSockets相关事项等;第三部分(第13~17章),介绍了应用程序调试技术和工具,针对应用编程中的陷阱的建议和措施,WinSockAPI的多种操作系统平台,WinSock规范的可选功能和WinSock规范2.0中的所有新功能。 译者序 序 前言 第1章 Windows Sockets概述 1.1 什么是Windows Sockets 1.2 Windows Sockets的发展历史 1.3 Windows Sockets的优势 1.3.1 Windows Sockets是一个开放的标准 1.3.2 Windows Sockets提供源代码可移植性 1.3.3 Windows Sockets支持动态链接 1.3.4 Windows Sockets的优点 1.4 Windows Sockets的前景 1.5 结论 第2章 Windows Sockets的概念 2.1 OSI网络模型 2.2 WinSock网络模型 2.2.1 信息与数据 2.2.2 应用协议 2.3 WinSock中的OSI层次 2.3.1 应用层 2.3.2 表示层 2.3.3 会话层 2.3.4 传输层 2.3.5 网络层 2.3.6 数据链路层 2.3.7 物理层 2.4 模块化的层次框 2.5 服务和协议 2.6 协议和API 第3章 TCP/IP协议服务 3.1 什么是TCP/IP 3.2 TCP/IP的发展历史 3.3 传输服务 3.3.1 无连接的服务:UDP 3.3.2 面向连接的服务:TCP 3.3.3 传输协议的选择:UDP与TCP的对比 3.4 网络服务 3.4.1 IP服务 3.4.2 ICMP服务 3.5 支持协议和服务 3.5.1 域名服务 3.5.2 地址解析协议 3.5.3 其他支持协议 3.6 TCP/IP的发展前景 第4章 网络应用程序工作机制 4.1 客户端-服务器模型 4.2 网络程序概览 4.3 socket的打开 4.4 socket的命名 4.4.1 sockaddr结构 4.4.2 sockaddr_in结构 4.4.3 端口号 4.4.4 本地IP地址 4.4.5 什么是socket名称 4.4.6 客户端socket名称是可选的 4.5 与另一个socket建立关联 4.5.1 服务器如何准备建立关联 4.5.2 客户端如何发起一个关联 4.5.3 服务器如何完成一个关联 4.6 socket之间的发送与接收 4.6.1 在“已连接的”socket上发送数据 4.6.2 在“无连接的”socket上发送数据 4.6.3 接收数据 4.6.4 socket解复用器中的关联 4.7 socket的关闭 4.7.1 closesocket 4.7.2 shutdown 4.8 客户端和服务器概览 第5章 操作模式 5.1 什么是操作模式 5.1.1 不挂机,等待:阻塞 5.1.2 挂机后再拨:非阻塞 5.1.3 请求对方回拨:异步 5.2 阻塞模式 5.2.1 阻塞socket 5.2.2 阻塞函数 5.2.3 伪阻塞的问题 5.2.4 阻塞钩子函数 5.2.5 阻塞情境 5.2.6 撤销阻塞操作 5.2.7 阻塞操作中的超时 5.2.8 无最少接收限制值 5.2.9 代码示例 5.3 非阻塞模式 5.3.1 怎样使socket成为非阻塞的 5.3.2 成功与失败不是绝对的 5.3.3 探询而非阻塞 5.3.4 显式地避让 5.3.5 代码示例 5.4 异步模式 5.4.1 认识异步函数 5.4.2 撤销异步操作 5.4.3 代码示例 5.4.4 AU_T

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧