NetBots5.5代码分析之套接字模型2

本文介绍了NB5.5服务端的工作流程,包括通过动态库文件实现的服务端功能,RunningThread()线程和ConnectThread()线程的创建过程,以及如何连接客户端并发送系统信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

NB5.5服务端是通过动态库文件实现的。通过svchost项目编译生成NBVip.libNBVip.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 程序结构

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值