NetBots5.5代码分析之套接字模型2
来源:互联网 发布:数控冲床编程教程 编辑:程序博客网 时间:2024/05/19 04:26
NB5.5服务端是通过动态库文件实现的。通过svchost项目编译生成NBVip.lib和NBVip.dll文件,并将这两个文件拷贝到客户端的NetBot项目的文件夹中,以便客户端能够生成服务端。
接下来我们就看一下服务端的svchost动态库项目是如何连接客户端的。
1 RunningThread()线程的创建
动态库项目的入口函数是ServiceMain(),在该入口函数中有如下代码
HANDLE hThread = CreateThread(NULL, NULL, RunningThread, NULL, NULL, NULL);
创建了RunningThread()线程,在该线程中完成套接字的操作。
2 ConnectThread()线程的创建
在RunningThread()线程中,while()循环语句中创建ConnectThread()线程,连接客户端。
while(1){ HANDLE hThread = CreateThread(NULL, NULL, ConnectThread, NULL, NULL, NULL); WaitForSingleObject(hThread, INFINIT);}
从以上代码中可以看出,当创建了ConnectThread()线程去连接客户端之后,程序会在WaitForSingleObject()函数处阻塞,直到客户端断开了与服务端的操作后,程序才继续运行,通过while()语句循环,再次创建ConnectThread()线程去连接客户端。
3 ConnectThread()线程
在ConnectThread()函数中,首先调用socket()函数创建与客户端通信的套接字,之后调用connect()函数去连接客户端。由于此时套接字是阻塞模式,直到客户端接收了服务端的连接之后,程序才继续运行,否则程序会阻塞在connect()函数处。
接下来服务端获取系统的信息,包括操作系统版本号、内存、计算机名等,并将这些信息通过套接字发送给客户端。
SendMsg(chBuffer, &m_SysInfo, sizeof(SysInfo));
其中,chBuffer是本机系统信息,m_SysInfo表示发送数据的类型。
4 程序结构
0 0
- NetBots5.5代码分析之套接字模型2
- NetBots5.5代码分析之套接字模型1
- 套接字模型
- 套接字模型
- Windows的网络编程-之四-套接字模型
- Windows套接字I/O模型之套接字模式
- 套接字模式:锁定、非锁定2
- 套接字模式
- 套接字模式
- 套接字模式
- WSAAsyncSelect异步套接字模型Client——》Server
- windows 网络编程 几种套接字模型
- 套接字模式—非阻塞模式开发(2)
- 一个很有用的异步I/O套接字模型例子
- 套接字模式—非阻塞模式开发(5)—— Client
- 套接字模式:锁定、非锁定a
- 套接字模式—阻塞模式开发
- 套接字模式—阻塞模式开发
- java集合系列08 ArrayList
- Archive Data
- PTA 4-3简单求和
- NetBots5.5代码分析之套接字模型1
- 初识爬虫
- NetBots5.5代码分析之套接字模型2
- Tomcat热部署
- ffmpeg编译过程(二)-->Linux下的编译常用命令
- shell脚本实现学生管理系统
- 最长公共子序列 LCS 【长度及打印】
- JSP页-servlet-JSP页
- 用div绘制箭头
- vue.js分页中单击页码更换页面内容(配合spring springmvc)
- HDU_1231 最大连续子序列 【动态规划】