NetBots5.5代码分析之套接字模型1
来源:互联网 发布:数控冲床编程教程 编辑:程序博客网 时间:2024/05/25 23:59
NB5.5采用的是客户端实现套接字监听,服务端通过套接字主动连接客户端的方式。首先介绍客户端套接字的处理流程。
1 StartListen()函数
客户端主界面类CNetBotDlg的成员函数StartListen()完成了套接字的创建、绑定和监听的工作。该函数的声明格式为
void StartListen(int Port);
函数的参数为套接字要监听的端口。
在该函数中创建线程用来创建、绑定和监听套接字。
2 ThreadAccept()线程函数
操作套接字的线程函数是ThreadAccept()函数。在该函数中,首先调用socket()、bind()以及listen()函数完成套接字的用来创建、绑定和监听。用于监听的套接字是CNetBotDlg类的成员变量m_ListenSock。
接下来使用while()循环来实现接收服务端连接的功能。
while(m_ListenSock != INVALID_SOCKET)
{
ClientSocket = accept(m_ListenSock, (LPSOCKADDR)&ClientAddr, &ClientAddr, &addr_size);
//创建线程处理ClientSocket
}
由于当前套接字的模式是阻塞模式,如果没有服务端主动连接客户端,此时ThreadAccept()线程会在accept()函数处阻塞,直到有服务端连接,程序才会继续运行,去创建线程处理与服务端的通信。
3 AcceptSocket()线程函数
当有服务端连接客户端时,创建AcceptSocket()线程处理与服务端的通信。在该函数中首先接收来自服务端的数据。
RecvMsg(socket, chBuffer, &msgHead);
其中,socket是AcceptSocket()线程函数的参数,即客户端用来与服务端通信的套接字;chBuffer中保存了从服务端收到的数据;msgHead中保存了数据的类型。之后,在AcceptSocket()线程函数中使用switch/case语句对从服务端收到的数据进行处理。
switch(msgHead.dwCmd)
{
case SOCKET_CONNET://服务端基本信息
break;
case SOCKET_FILEMANAGE://服务端文件管理
break;
case SOCKET_SCREEN://服务端屏幕监控
break;
case SOCKET_PROCESS://服务端进程管理
break;
case SOCKET_CMDSHELL://服务端cmd Shell
break;
case SOCKET_FILEDOWN://服务端文件下载
break;
case SOCKET_FILEUP://服务端文件上传
break;
case SOCKET_VIDEOCAP://服务端视频捕捉
break;
}
4 程序构造
- NetBots5.5代码分析之套接字模型1
- NetBots5.5代码分析之套接字模型2
- 套接字模型
- 套接字模型
- Windows的网络编程-之四-套接字模型
- Windows套接字I/O模型之套接字模式
- 套接字模式
- 套接字模式
- 套接字模式
- WSAAsyncSelect异步套接字模型Client——》Server
- windows 网络编程 几种套接字模型
- 套接字模式—非阻塞模式开发(1)
- Windows套接字I/O模型(1) 套接字模式
- 一个很有用的异步I/O套接字模型例子
- 套接字模式—非阻塞模式开发(5)—— Client
- 套接字模式:锁定、非锁定a
- 套接字模式:锁定、非锁定2
- 套接字模式—阻塞模式开发
- 10. Regular Expression Matching
- I/O 简单文本文件读写改 对象 ArrayList保存文件的记录
- java集合系列08 ArrayList
- Archive Data
- PTA 4-3简单求和
- NetBots5.5代码分析之套接字模型1
- 初识爬虫
- NetBots5.5代码分析之套接字模型2
- Tomcat热部署
- ffmpeg编译过程(二)-->Linux下的编译常用命令
- shell脚本实现学生管理系统
- 最长公共子序列 LCS 【长度及打印】
- JSP页-servlet-JSP页
- 用div绘制箭头