windows网络编程技术,Windows网络编程技术的目录
大家好,关于windows网络编程技术很多朋友都还不太明白,不过没关系,因为今天小编就来为大家分享关于Windows网络编程技术的目录的知识点,相信应该可以解决大家的一些困惑和问题,如果碰巧可以解决您的问题,还望关注下本站哦,希望对各位有所帮助!
Windows网络编程技术的目录
第1章 Windows网络编程基础
1.1 Windows网络应用
1.1.1常用的网络应用实例
1.1.2网络应用的特点与运行环境
1.1.3网络应用前景
1.2 Windows环境下的应用程序
1.2.1应用程序的形态
1.2.2应用程序的运行环境
1.2.3应用程序的开发环境VC++
1.3 Windows环境下的网络应用程序
1.3.1网络应用程序的系统支持
1.3.2网络应用程序运行环境的问题
1.3.3网络应用程序的应用模型
第2章单机资源共享的应用编程
2.1进程间通信
2.1.1进程间通信应用实例及概念
2.1.2进程的创建与终止
2.1.3内存文件映射
2.2多线程通信
2.2.1多线程应用实例及概念
2.2.2线程的创建、挂起、激活和终止
2.2.3线程的优先级
2.3同步控制机制
2.3.1同步控制应用实例及意义
2.3.2同步控制类型及应用条件
2.3.3应用实例的算法与实现
2.4动态链接库
2.4.1静态链接库与动态链接库的应用实例
2.4.2动态链接库的创建与调用方法
2.4.3动态链接库的应用的条件
第3章基于NetBIOS的网络编程
3.1基于NetBIOS的网络编程基础
3.1.1网络应用实例与来源
3.1.2 NetBIOS提供的接口与服务
3.1.3网络控制块NCB的应用
3.2数据报通信编程
3.2.1数据报通信应用模型
3.2.2实例中的广播式数据报通信算法与实现
3.2.3实例中定向型数据报通信的算法与实现
3.3会话通信编程
3.3.1会话通信应用模型
3.3.2实例中会话服务器的算法与实现
3.3.3实例中的会话客户算法与实现
第4章基于WinSock的网络编程
4.1基于WinSock网络编程的基础
4.1.1网络应用实例与来源
4.1.2 Winsock提供的接口与服务
4.1.3 WinSock提供的函数调用
4.2 WinSock网络应用实例算法与实现
4.2.1获取主机网络信息
4.2.2 WinSock单播、多播与广播通信应用
4.2.3 WinSock会话通信应用
4.3 WinSock异步I/O
4.3.1 WinSock异步I/O应用实例
4.3.2 WinSock的I/O方法
4.3.3异步I/O应用实例的算法与实现
第5章直接网络编程
5.1原始套接字编程
5.1.1原始套接字简介
5.1.2 WinSock的原始套接字
5.1.3 Winsock原始套接字编程步骤
5.1.4 Winsock原始套接字实例
5.2基于winPcap网络数据包捕获
5.2.1 WinPcap简介
5.2.2网络数据包捕获的原理
5.2.3 Windlows捕获数据包的结构
5.2.4利用WinPcap进行网络数据包的捕获和过滤的设计步骤
5.2.5 WinPcap开发环境配置
5.2.6 WinPcap实例分析
5.2.7数据包捕获性能的优化
第6章高级网络编程
6.1简单MFC网络编程
6.1.1网络聊天应用实例
6.1.2 MFC基本框架与接口
6.1.3网络应用实例的实现
6.2基于MFC Socket类编程
6.2.1 CAsyncSocket类和CSocket类
6.2.2网络应用实例功能介绍
6.2.3网络应用实例算法及实现
6.3 MFC WinInet编程
6.3.1 WinInet API编程
6.3.2 winInet类的编程模型
6.3.3 HTTP网络应用实例算法及实现
附录1网络、应用程序开发说明
附1.1网络体系结构的概念
附1.2可执行文件的PE格式
附1.3 VC++的项目向导类型和文件类型
附1.4 Win32系统调用
附录2部分Win32函数定义
附录3 NetBIOS的NCB结构、命令和错误代码
附3.1网络控制块NCB的结构
附3.2 NCB ncb—command字段的命令代码
附3.3 NetBIOS错误代码
附录4 WinSoek数据结构、库函数和错误代码
附4.1 Winsockk数据结构
附4.2 Winsock基本套接字函数
附4.3 Winsock的扩展函数
附4.4 Winsockk错误代码
附录5 WinPcap定义、库函数
附5.1定义
附5.2函数
……
请比较Linux与Windows在网络编程方面的特点
找了一段,大致涉及到了您的问题:
一、socket的模式
socket一般有两种模式:同步和异步(windows网络编程技术中也可叫锁定和非锁定,Linux网络编程叫阻塞和非阻塞)。
二、socket的类型
socket一般有三种类型,基于TCP的流式套接字,基于UDP的数据报套接字和原始套接字。
三、socket的IO模型
socket
的IO模型是编程中使用socket两种模式的策略,它们适用的场合不同,在不同的操作系统上支持的模型也不同,例如windows从NT版本才开始支持
完成端口模型。Linux和Windows所支持的模型也有区别,当然也有相同的地方,可能叫法不一样,但大致思路是一样的,下面分别介绍windows
和Linux的IO模型
1、 Windows下的套接字IO模型:
A、 Select(选择)模型
用于同步socket的状态检测模型,又叫(Linux)多路复用,可以同时检测多个socket的状态
B、 WSAAsyncSelect(异步选择)模型
用于异步socket的异步事件设置,它是基于Windows消息的模型,必须先打开一个窗口,然后把窗口和socket的消息绑定,这样,在socket有消息通知时,操作系统便通知窗口,然后在窗口进行处理。
C、 WSAEventSelect(异步事件)模型
用
于异步socket的异步事件,它是基于网络事件的模型,先使用CreateEvent创建一个事件,然后使用WSAEventSelect进行事件绑
定,然后可以使用WaitForMultipleObject(Event)进行事件监听,可以同时监听多个事件,不光是socket的,比如可以监听使
用CreateWaitableTimer创建的Timer等。
D、重叠IO模型
用
于异步socket,在创建socket时需要在创建函数WSASocket中使用WSA_FLAG_OVERLAPPED标志,然后在投递IO请求的时
候将一个Overlapped结构体指针赋给投递函数,可以使用WSAWaitForMultipleObject来监听事件,然后使用
WSAGetOverlappedResult来获取IO的状态,也可以在Overlapped结构体中使用完成例程来处理,即在投递函数中把完成例程赋
给投递函数。
E、完成端口模型
它
是迄今为止最复杂的一种IO模型,当应用程序需要管理众多的套接字并且希望随着系统内安装的CPU数目的增多,应用程序的性能也可以线性增加,就可以使用
这种模型,它的原理是每个CPU可以单独负责一个线程的执行,避免线程的频繁切换。使用这种模型往往可以达到最佳的系统性能。
首
先需要使用CreateIOCompletePort来创建完成端口,然后将IO句柄和此端口绑定,绑定也是使用此函数,当然也可以一次完成。接着是创建
工作者线程,工作者线程会使用GetQueuedCompletionStatus进入完成端口维护的线程池,当有完成事件时,会激活一个线程。
2、 Linux下的IO模型
A、阻塞IO
B、非阻塞IO
C、IO多路复用(选择)
D、信号驱动
用于异步socket,首先设定信号处理函数,然后使用fcntl函数设定socket的拥有者,像windows下使用WSAAsncSelect设定socket的窗口一样。使用这种模型,当内核操作可以被操作的时候通知我们的应用程序
E、异步IO
当内核在所有操作完成后才会通知应用程序
四、socket的一些使用上的优化
A、缓冲区的优化,可以考虑让应用程序使用比较小的缓冲区,但同时使用多个WSARecv
B、使用socket选项SO_SNDBUF和SO_RCVBUF设置socket缓冲区大小,如果设为0,操作体系统会使用应用程序的缓冲区,这样避免了从系统缓冲区向用户区复制的开销
五、注意这些IO模型有些不光是针对socket的,其他的IO操作也可以使用,最常用使用的是WriteFile,ReadFile等函数。
其它查考网址:
http://blog.163.com/tianle_han/blog/static/6617826200821522743948/
http://blog.csdn.net/yibulianhua/article/details/5374317
怎样学习Windows 网络编程
新手必学:windows网络编程经典入门
作者:huyoo
对于一个windows网络编程初学者,下面方法是经典入门。
初学者建议不要用MFC提供的类,而用windows API做一个简单服务器和客户端,这样有助于对socket编程机制的理解。
为了简单起见,应用程序是基于MFC的标准对话框。
Winsock用WINDOWS API实现:
(1)服务器端有两个线程:
主线程—你需要编写以下函数来实现
#define NETWORK_EVENT USER_MESSAGE+100 file://定义网络事件
sockaddr_in clientaddr; file://暂时存放客户端IP地址
file://自己定义消息映射函数,将上面定义的网络事件映射到处理函数
file://OnNetEvent为网络事件处理函数,它在下面定义
ON_MESSAGE(NETWORK_EVENT, OnNetEvent);
在你对话框中的初始化函数中调用下面的初始化网络的子函数
BOOL InitNetwork() file://初始化网络
{
file://初始化TCP协议
BOOL ret= WSAStartup(MAKEWORD(2,2),&wsaData);
if(ret!= 0)
{
MessageBox("初始化套接字失败!");
return FALSE;
}
file://创建服务器端套接字
SOCKET serverSocket
= socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if(serverSocket== INVALID_SOCKET)
{
MessageBox("创建套接字失败!");
closesocket(m_Socket);
WSACleanup();
return FALSE;
}
file://绑定到本地一个端口上
sockaddr_in localaddr;
localaddr.sin_family= AF_INET;
localaddr.sin_port= htons(1688);
localaddr.sin_addr.s_addr= 0;
if(bind(serverSocket,(const struct sockaddr*)&localaddr,
sizeof(sockaddr))== SOCKET_ERROR)
{
MessageBox("绑定地址失败!");
closesocket(m_Socket);
WSACleanup();
return FALSE;
}
file://注册网络异步事件,m_hWnd为应用程序的主对话框或主窗口的句柄
WSAAsyncSelect(serverSocket, m_hWnd, NETWORK_EVENT,
FD_ACCEPT| FD_CLOSE| FD_READ| FD_WRITE);
listen(serverSocket, 5); file://设置侦听模式
return TRUE;
}
file://定义网络事件的响应函数
void OnNetEvent(WPARAM wParam, LPARAM lParam)
{
file://调用API函数,得到网络事件类型
int iEvent= WSAGETSELECTEVENT(lParam);
file://得到发出此事件的客户端套接字
SOCKET pSock=(SOCKET)wParam;
switch(iEvent)
{
case FD_ACCEPT: file://客户端连接请求
{
OnAccept();
break;
}
case FD_CLOSE: file://客户端断开事件:
{
OnClose(pSock);
break;
}
case FD_READ: file://网络数据包到达事件
{
OnReceive(pSock);
break;
}
case FD_WRITE: file://发送网络数据事件
{
OnSend(pSock);
break;
}
default: break;
}
}
void OnAccept(SOCET pSock) file://响应客户端连接请求函数
{
int len= sizeof(sockaddr);
file://调用API函数,接受连接,并返回一个新套接字
file://还可以获得客户端的IP地址
SOCKET clientSocket= accept(serverSocket,
(struct sockaddr*)&clientaddr,&len);
file://为新的socket注册异步事件,注意没有Accept事件
if(WSAAsyncSelect(clientSocket,m_hWnd, IP_EVENT,
FD_CLOSE| FD_READ| FD_WRITE)== SOCKET_ERROR)
{
MessageBox("注册异步事件失败!");
return;
}
file://自编函数,将此客户端的相关信息保存下来:套接字、
// IP地址、登陆时间
saveClientSocket(clientSocket,clientAddr,currentTimer);
}
void OnClose(SOCET pSock)
{
file://自编函数,结束与相应的客户端的通信,释放相应资源并做相应处理
endClientSocket(pSock);
}
void OnSend(SOCET pSock)
{
file://自编函数,在给客户端发数据时做一些预处理
handleOnSend(pSock);
}
void OnReceive(SOCET pSock)
{
recv(...); file://调用API函数,读出网络缓冲区中的数据包
file://自编函数,将此数据包和发出此数据的客户端
file://clientSocket封装成一条网络消息
buildNetMsg(...);
file://自编函数,将此网络消息放入一个消息队列中,由工作线程去处理
saveNetMsg(...);
SetEvent(...); file://用事件对象触发工作线程
}
客户端登陆后,随即把自己的计算机名发给服务器,服务器接到后,把它保存下来。这样服务器就可以显示所有在线客户端的信息了,包括:客户端计算机名、IP地址、登陆时间等。
注意:客户端没有OnAccept()函数,但有OnConnect()函数。
工作线程—
在你的应用程序初始化时,创建并启动一个工作线程
AfxBeginThread(WorkThread,this,THREAD_PRIORITY_NORMAL);
file://this可能为应用程序的主对话框或主窗口的句柄
UINT WorkThread(LPVOID pParam)
{
while(1)
{
file://等待多重事件到来
int ret= WaitForMultipleObject(...);
switch(ret)
{
case OBJECT_0:
{
if(bNewNetMsg) file://查看网络消息队列是否有新的网络消息
{
readNetMsg(...); file://如有新的网络消息,则读出
handleNetMsg(...); file://处理此网络消息
}
break;
}
case OBJECT_0+ 1:
{
file://做退出处理
break;
}
default: break;
}
return 0;
}
客户端为单线程,登陆服务器时,用connect()函数给服务器发连接请求;
客户端没有OnAccept()函数,但有OnConnect()函数。
在OnConnect()函数里做发连接请求时的预处理;
在OnReceive()函数里响应并处理网络数据;
在OnClose()函数里响应服务器的关闭事件;
在OnSend()函数里做发数据时的预处理;
如果你还想实现各客户端之间的在线交流(即所谓的聊天室),你在客户端还可以基于UDP协议
再做一套多点对多点的局域网组播模型模型,以后在和你聊,你先把上面的程序实现。
以上的I/O异步模型基于Windows的消息机制,另外还可以用事件模型、重叠模型或完成端口模型,
建议你参考Windows网络编程指南之类的书。
如果你能对上面的机制很熟练,你肯定已经对Winsock编网络程序的机制有一定理解,接下来你可以进行更精彩的编程,不仅可以在网上传输普通数据,而且还
以传输语音、视频数据,你还可以自己做一个聊天室,和你的同学在实验室的局域网里可以共同分享你的成果。
windows网络编程技术和Windows网络编程技术的目录的问题分享结束啦,以上的文章解决了您的问题吗?欢迎您下次再来哦!