MFC Winsock 类:MFC 中的网络编程

news/2024/7/24 6:08:31/文章来源:https://blog.csdn.net/JAZJD/article/details/139130920

目录

概述

一.MFC Winsock 类简介

1.MFC Winsock 类的主要功能

2.MFC Winsock 类的主要优点

3.MFC Winsock 类的主要缺点

4.MFC Winsock 类的主要类

5.MFC Winsock 类示例

二.CAsyncSocket 类

1.主要功能

异步通信

事件驱动

数据传输

套接字选项

2.常用函数

创建套接字对象

连接到远程服务器

发送和接收数据

关闭套接字连接

处理网络事件的函数

三.CSocket 类

1.CSocket类的特点

2.主要功能

3.常用函数

四.MFC Winsock 编程模型

1.基于事件的编程模型

2.基于同步的编程模型

总结


概述

        MFC(Microsoft Foundation Class)是 Microsoft 公司提供的一套 C++ 类库,用于在 Windows 平台上开发桌面应用程序。MFC 提供了丰富的类和函数,简化了 Windows 应用程序的开发。除了用于开发传统 GUI 应用程序的类之外,MFC 还提供了用于网络编程的类,称为 MFC Winsock 类。

一.MFC Winsock 类简介

        MFC Winsock 类是 MFC 框架中用于网络编程的一套类,它封装了 Windows 操作系统中的 Winsock API(Windows Sockets API),为程序员提供了一套面向对象的接口来实现网络通信和数据传输。MFC Winsock 类简化了网络编程的过程,使程序员能够更容易地开发网络应用程序。

1.MFC Winsock 类的主要功能

  • 建立和管理网络连接
  • 发送和接收网络数据
  • 处理网络事件

2.MFC Winsock 类的主要优点

  • 面向对象,易于使用
  • 封装了 Winsock API 的复杂性
  • 提供了丰富的功能和工具

3.MFC Winsock 类的主要缺点

  • 执行效率较低
  • 增加了代码量

4.MFC Winsock 类的主要类

  • CSocket 类:用于建立和管理网络连接。
  • CAsyncSocket 类:用于异步网络通信。
  • CArchive 类:用于序列化和反序列化网络数据。

5.MFC Winsock 类示例

以下代码演示了如何使用 MFC Winsock 类建立一个 TCP 连接并发送数据:

CSocket socket;// 建立连接
socket.Create();
socket.Connect(_T("127.0.0.1"), 80);// 发送数据
CString strData = _T("Hello, World!");
socket.Send(strData.GetBuffer(), strData.GetLength());// 关闭连接
socket.Close();

二.CAsyncSocket 类

        CAsyncSocket 类是 MFC Winsock 类库中的一个重要类,它提供了一个异步套接字对象,用于实现异步网络通信。异步套接字允许应用程序在发送或接收数据时不阻塞,从而提高了应用程序的响应能力。

1.主要功能

        CAsyncSocket类是MFC框架中用于异步网络编程的核心类,它封装了Windows Sockets API中的异步网络编程功能,为程序员提供了一套面向对象的接口来实现异步网络通信和数据传输。CAsyncSocket类具有以下主要功能:

异步通信

        CAsyncSocket类支持异步通信,这意味着应用程序在发送或接收数据时不阻塞,可以继续执行其他任务。这使得应用程序能够提高响应速度和处理效率,尤其是在需要同时处理多个网络连接的情况下。

CAsyncSocket类提供了以下异步通信功能:

  • 异步连接:应用程序可以使用CAsyncSocket类的Connect函数异步地建立网络连接。在连接建立完成后,CAsyncSocket类会触发一个连接事件通知应用程序。
  • 异步发送:应用程序可以使用CAsyncSocket类的Send函数异步地发送数据。在数据发送完成后,CAsyncSocket类会触发一个发送事件通知应用程序。
  • 异步接收:应用程序可以使用CAsyncSocket类的Receive函数异步地接收数据。在数据接收完成后,CAsyncSocket类会触发一个接收事件通知应用程序。
事件驱动

        CAsyncSocket类采用事件驱动机制来通知应用程序网络事件的发生。应用程序可以注册事件处理函数来响应CAsyncSocket类触发的各种事件,例如连接建立、数据接收、连接关闭等。

CAsyncSocket类支持以下事件:

  • 连接事件:连接建立时触发,通知应用程序连接已建立。
  • 发送事件:数据发送完成后触发,通知应用程序数据已发送。
  • 接收事件:数据接收完成后触发,通知应用程序数据已接收。
  • 错误事件:发生错误时触发,通知应用程序错误信息。
  • 关闭事件:连接关闭时触发,通知应用程序连接已关闭。
数据传输

        CAsyncSocket类提供了发送和接收数据的函数,应用程序可以发送或接收文本或二进制数据。

CAsyncSocket类支持以下数据传输功能:

  • 发送文本数据:应用程序可以使用CAsyncSocket类的SendString函数发送文本数据。
  • 发送二进制数据:应用程序可以使用CAsyncSocket类的Send函数发送二进制数据。
  • 接收文本数据:应用程序可以使用CAsyncSocket类的ReceiveString函数接收文本数据。
  • 接收二进制数据:应用程序可以使用CAsyncSocket类的Receive函数接收二进制数据。
套接字选项

        CAsyncSocket类提供了设置或获取套接字选项的函数,如超时时间、缓冲区大小等。套接字选项可以控制网络连接的行为和性能。

CAsyncSocket类支持以下套接字选项:

  • 超时时间:设置或获取连接超时时间和接收超时时间。
  • 缓冲区大小:设置或获取发送缓冲区大小和接收缓冲区大小。
  • 重传策略:设置或获取数据重传策略。

2.常用函数

        CAsyncSocket类是MFC框架中用于异步网络编程的核心类,它提供了丰富的函数来实现异步网络通信和数据传输。以下是一些CAsyncSocket类的常用函数:

创建套接字对象
  • Create():创建一个异步套接字对象。
CAsyncSocket socket;// 创建套接字对象
socket.Create();
连接到远程服务器
  • Connect():连接到一个远程服务器。
// 连接到远程服务器
socket.Connect(_T("127.0.0.1"), 80);
发送和接收数据
  • Send():发送数据。
  • Receive():接收数据。
// 发送文本数据
CString strData = _T("Hello, World!");
socket.Send(strData.GetBuffer(), strData.GetLength());// 接收文本数据
CString strRecv;
int nRecv = socket.Receive(strRecv.GetBuffer(), strRecv.GetBufferSize());
strRecv.ReleaseBuffer(nRecv);
关闭套接字连接
  • Close():关闭套接字连接。
// 关闭套接字连接
socket.Close();
处理网络事件的函数

CAsyncSocket类支持以下网络事件:

  • 连接事件:连接建立时触发,通知应用程序连接已建立。
  • 发送事件:数据发送完成后触发,通知应用程序数据已发送。
  • 接收事件:数据接收完成后触发,通知应用程序数据已接收。
  • 错误事件:发生错误时触发,通知应用程序错误信息。
  • 关闭事件:连接关闭时触发,通知应用程序连接已关闭。

        应用程序可以注册事件处理函数来响应CAsyncSocket类触发的各种事件。以下是一些常用的事件处理函数:

  • OnConnect():处理连接事件。
  • OnSend():处理发送事件。
  • OnReceive():处理接收事件。
  • OnError():处理错误事件。
  • OnClose():处理关闭事件。

例如,以下代码演示了如何注册事件处理函数:

socket.SetEventMask(FM_CONNECT | FM_SEND | FM_RECEIVE | FM_CLOSE | FM_ERROR
);socket.AttachWindow(this);

三.CSocket 类

        CSocket类是MFC Winsock类库中的重要成员,它提供了一个同步套接字对象,用于实现同步网络通信。与异步套接字(CAsyncSocket)不同,CSocket在进行数据发送或接收时会阻塞主线程,直到操作完成或超时。

1.CSocket类的特点

  • 同步操作:CSocket的Send和Receive函数是阻塞式的,会在数据发送或接收完成或超时之前一直占用主线程。
  • 面向对象封装:CSocket封装了底层的Winsock API,为开发人员提供了更加直观易用的面向对象接口。
  • 便捷的数据管理:CSocket可以与CSocketFile和CArchive类协同工作,简化数据的发送和接收操作。

2.主要功能

        CSocket类是MFC框架中提供的一个用于网络编程的类,它封装了Windows Socket API,为开发人员提供了一个面向对象的编程接口。CSocket类的主要功能包括:

1. 同步通信

        CSocket类提供了同步的发送和接收数据函数,即SendReceive函数。在调用Send函数时,应用程序会阻塞等待数据发送完成,直到所有数据都被发送或发生错误为止。在调用Receive函数时,应用程序也会阻塞等待数据接收完成,直到接收指定数量的数据或发生错误为止。

        同步通信模式适用于需要保证数据传输可靠性的场景,例如文件传输、关键数据的传输等。

2. 数据传输

        CSocket类提供了发送和接收文本或二进制数据的函数,即SendTextReceiveTextSendBufferReceiveBuffer函数。SendTextReceiveText函数用于发送和接收文本数据,SendBufferReceiveBuffer函数用于发送和接收二进制数据。

        CSocket类支持多种数据格式的转换,包括文本格式(ANSI、Unicode)、二进制格式等。

3. 套接字选项

        CSocket类提供了设置或获取套接字选项的函数,即SetSocketOptionGetSocketOption函数。套接字选项用于控制套接字的行为,例如设置超时时间、缓冲区大小、重传策略等。

        设置合理的套接字选项可以提高网络通信的效率和可靠性。

4. 异常处理

        CSocket类提供了异常处理机制,当发生网络错误时会抛出异常,例如CNetworkExceptionCTimeoutException等。程序员可以捕获这些异常并进行相应的处理。

        异常处理机制可以简化网络编程的代码,提高程序的鲁棒性。

3.常用函数

        CSocket类提供了丰富的函数来满足各种网络编程需求,以下是一些常用的函数及其说明:

1. Create()

功能:创建一个同步套接字对象。

语法:

BOOL Create(AF_INET af, int type, int protocol);

参数说明:

  • af:地址家族,指定套接字使用的地址类型,例如AF_INET表示IPv4地址,AF_INET6表示IPv6地址。
  • type:套接字类型,例如SOCK_STREAM表示面向连接的套接字,SOCK_DGRAM表示无连接的套接字。
  • protocol:协议类型,指定套接字使用的协议,例如IPPROTO_TCP表示TCP协议,IPPROTO_UDP表示UDP协议。

返回值:

  • 成功创建套接字返回TRUE,失败返回FALSE。

示例代码:

CSocket socket;// 创建一个IPv4、面向连接、使用TCP协议的套接字
BOOL bRet = socket.Create(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if (!bRet)
{AfxMessageBox(_T("Create socket failed!"));return;
}

2. Connect()

功能:连接到一个远程服务器。

语法:

BOOL Connect(LPCTSTR lpszAddress, UINT nPort);

参数说明:

  • lpszAddress:远程服务器的地址,可以是域名或IP地址。
  • nPort:远程服务器的端口号。

返回值:

  • 成功连接返回TRUE,失败返回FALSE。

示例代码:

CSocket socket;// 创建一个套接字
socket.Create(AF_INET, SOCK_STREAM, IPPROTO_TCP);// 连接到服务器
BOOL bRet = socket.Connect(_T("127.0.0.1"), 80);
if (!bRet)
{AfxMessageBox(_T("Connect to server failed!"));return;
}

3. Send() 和 Receive()

功能:发送和接收数据。

语法:

int Send(LPVOID lpBuffer, int nBufferLen);
int Receive(LPVOID lpBuffer, int nBufferLen);

参数说明:

  • lpBuffer:指向要发送或接收数据的缓冲区的指针。
  • nBufferLen:缓冲区的大小。

返回值:

  • 发送或接收的数据字节数,如果发生错误则返回-1。

示例代码:

CSocket socket;// 创建一个套接字
socket.Create(AF_INET, SOCK_STREAM, IPPROTO_TCP);// 连接到服务器
socket.Connect(_T("127.0.0.1"), 80);// 发送数据
CString data = _T("Hello, World!");
int nSendBytes = socket.Send(data.GetBuffer(), data.GetLength());
if (nSendBytes == -1)
{AfxMessageBox(_T("Send data failed!"));return;
}// 接收数据
char buffer[1024];
int nRecvBytes = socket.Receive(buffer, sizeof(buffer));
if (nRecvBytes == -1)
{AfxMessageBox(_T("Receive data failed!"));return;
}// 处理接收到的数据
CString receivedData(buffer, nRecvBytes);
AfxMessageBox(receivedData);

4. Close()

功能:关闭套接字连接。

语法:

void Close();

 示例代码:

CSocket socket;// 创建一个套接字
socket.Create(AF_INET, SOCK_STREAM, IPPROTO_TCP);// 连接到服务器
socket.Connect(_T("127.0.0.1"), 80);// 发送数据
CString data = _T("Hello, World!");
int nSendBytes = socket.Send(data.GetBuffer(), data.GetLength());
if (nSendBytes == -1)
{AfxMessageBox(_T("Send data failed!"));return;
}// 接收数据
char buffer[1024];
int nRecvBytes = socket.Receive(buffer, sizeof(buffer));
if (nRecvBytes == -1)
{AfxMessageBox(_T("Receive data failed!"));

四.MFC Winsock 编程模型

        MFC Winsock 类库提供了两种主要的编程模型:基于事件的编程模型和基于同步的编程模型。

1.基于事件的编程模型

        CAsyncSocket类除了支持同步通信外,还支持基于事件的异步通信。在异步通信模式下,应用程序在发送或接收数据时不会阻塞,而是继续执行其他操作。当网络事件发生时,MFC框架会调用应用程序指定的事件处理函数,应用程序可以在其中处理事件。

基于事件的编程模型具有以下优点:

  • 提高了应用程序的响应能力。应用程序在发送或接收数据时不会阻塞,可以继续执行其他操作,从而提高了应用程序的响应速度。
  • 降低了对CPU资源的占用。由于应用程序在等待网络事件时不会占用CPU资源,因此可以提高CPU资源的利用率。
  • 简化了程序的编写。基于事件的编程模型使用事件处理函数来处理网络事件,可以简化程序的编写。

以下是一些使用CAsyncSocket类进行异步网络编程的示例代码:

class CMySocket : public CSocket
{
public:CMySocket(){m_pWnd = NULL;}~CMySocket(){m_pWnd = NULL;}DECLARE_DYNAMIC(CMySocket)public:virtual void OnReceive(int nErrorCode, int nBytesTransfered, LPVOID lpBuffer){if (nErrorCode == 0){CString strData((char*)lpBuffer, nBytesTransfered);m_pWnd->PostMessage(WM_SOCKET_DATA, nBytesTransfered, (LPARAM)strData.GetBuffer());}else{AfxMessageBox(_T("Receive data failed!"));}}virtual void OnConnect(int nErrorCode){if (nErrorCode == 0){AfxMessageBox(_T("Connect to server successfully!"));}else{AfxMessageBox(_T("Connect to server failed!"));}}private:CWnd* m_pWnd;
};class CMyDlg : public CDialog
{
public:CMyDlg(CWnd* pParent = NULL) : CDialog(CMyDlg::IDD, pParent){}enum { IDD = IDD_MYDLG };protected:virtual void OnInitDialog(){CDialog::OnInitDialog();m_socket.Create(AF_INET, SOCK_STREAM, IPPROTO_TCP);m_socket.SetEventHandler(&m_socketEventHandler);}virtual BOOL OnCommand(WPARAM wParam, LPARAM lParam){if (wParam == ID_CONNECT){BOOL bRet = m_socket.Connect(_T("127.0.0.1"), 80);if (!bRet){AfxMessageBox(_T("Connect to server failed!"));return FALSE;}}else if (wParam == ID_SEND){CString data = _T("Hello, World!");int nSendBytes = m_socket.Send(data.GetBuffer(), data.GetLength());if (nSendBytes == -1){AfxMessageBox(_T("Send data failed!"));return FALSE;}}return TRUE;}private:CMySocket m_socket;CMySocketEventHandler m_socketEventHandler;
};class CMySocketEventHandler : public CAsyncSocketEventHandler
{
public:CMySocketEventHandler(){m_pDlg = NULL;}~CMySocketEventHandler(){m_pDlg = NULL;}void SetDlg(CMyDlg* pDlg){m_pDlg = pDlg;}public:virtual void OnReceive(int nErrorCode, int nBytesTransfered, LPVOID lpBuffer){if (m_pDlg){m_pDlg->PostMessage(WM_SOCKET_DATA, nBytesTransfered, (LPARAM)lpBuffer);}}virtual void OnConnect(int nErrorCode){if (m_pDlg){if (nErrorCode == 0){m_pDlg->PostMessage(WM_SOCKET_CONNECT, 

2.基于同步的编程模型

        基于同步的编程模型使用CSocket类实现同步网络通信。应用程序创建一个同步套接字对象,并调用同步的发送和接收数据函数。这些函数在操作完成或超时之前是阻塞的。这意味着应用程序在调用这些函数时会一直等待,直到数据发送或接收完成,或者发生错误为止。

基于同步的编程模型具有以下优点:

  • 简化了网络编程的过程。同步的发送和接收数据函数使用起来非常简单,应用程序只需调用这些函数并等待结果即可。
  • 保证了数据完整性和顺序。由于同步的发送和接收数据函数是阻塞的,因此可以保证数据完整性和顺序。

但是,基于同步的编程模型也存在以下缺点:

  • 降低了应用程序的响应能力。由于应用程序在发送或接收数据时会阻塞,因此会降低应用程序的响应能力。
  • 占用CPU资源。由于应用程序在等待网络事件时会占用CPU资源,因此会降低CPU资源的利用率。

以下是一些使用CSocket类进行同步网络编程的示例代码:

CSocket socket;// 创建一个套接字
socket.Create(AF_INET, SOCK_STREAM, IPPROTO_TCP);// 连接到服务器
socket.Connect(_T("127.0.0.1"), 80);// 发送数据
CString data = _T("Hello, World!");
int nSendBytes = socket.Send(data.GetBuffer(), data.GetLength());
if (nSendBytes == -1)
{AfxMessageBox(_T("Send data failed!"));return;
}// 接收数据
char buffer[1024];
int nRecvBytes = socket.Receive(buffer, sizeof(buffer));
if (nRecvBytes == -1)
{AfxMessageBox(_T("Receive data failed!"));return;
}// 处理接收到的数据
CString receivedData(buffer, nRecvBytes);
AfxMessageBox(receivedData);

总结

        MFC Winsock 类是 MFC 框架中用于网络编程的一套类,它封装了 Windows 操作系统中的 Winsock API,为程序员提供了一套面向对象的接口来实现网络通信和数据传输。MFC Winsock 类库提供了异步和同步两种编程模型,满足了不同应用程序的需求。MFC Winsock 类广泛应用于各种 Windows 网络应用程序中,为程序员提供了强大的工具和框架,简化了网络编程的过程。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_1052685.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

685. 冗余连接 II

685. 冗余连接 II 问题描述 在本问题中,有根树指满足以下条件的 有向 图。该树只有一个根节点,所有其他节点都是该根节点的后继。该树除了根节点之外的每一个节点都有且只有一个父节点,而根节点没有父节点。 输入一个有向图,该…

如何将Windows PC变成Wi-Fi热点?这里提供详细步骤

序言 Windows 10和Windows 11都有内置功能,可以将你的笔记本电脑(或台式机)变成无线热点,允许其他设备连接到它并共享你的互联网连接。以下是操作指南。 由于Windows中隐藏的虚拟Wi-Fi适配器功能,你甚至可以在连接到另一个Wi-Fi网络或无线路由器时创建Wi-Fi热点,通过另…

Qt | QTabBar 类(选项卡栏)

01、上节回顾 Qt | QStackedLayout 类(分组布局或栈布局)、QStackedWidget02、简介 1、QTabBar类直接继承自 QWidget。该类提供了一个选项卡栏,该类仅提供了一个选项卡, 并没有为每个选项卡提供相应的页面,因此要使选项卡栏实际可用,需要自行为每个选项卡设置需要显示的页…

基础—SQL—DML(数据操作语言)插入数据

一、介绍 分类全称说明DMLData Manipulation Language数据操作语言。用来对数据库表中的数据进行增删改(插入、删除、修改) 则增、删、改是三个操作也就对应着三个关键字,分别是: 添加数据:( INSERT )修改数据&#…

远程户外监控组网方案,工业4G路由器ZR2000

户外监控无人值守4G工业路由器组网应用涉及工业自动化、数据传输和远程监控的重要领域。在户外没有光纤的情况下,想要让监控或传感器等设备联网,仅需一台4G工业路由器即可解决。以下是关于远程监控户外组网的详细分析与应用: 物联网应用场景 …

LeetCode115:不同的子序列

题目描述 给你两个字符串 s 和 t ,统计并返回在 s 的 子序列 中 t 出现的个数,结果需要对 109 7 取模。 代码 /*dp[i][j]:以i为结尾的s中有以j为尾的t的个数递推公式:当s[i - 1] 与 t[j - 1]相等时,dp[i][j]可以有两…

基于Java+SpringBoot+Mybaties-plus+Vue+elememt + uniapp 新闻资讯 的设计与实现

一.项目介绍 本系统分为 后端 和 小程序端 后端:点击登录按钮 设置个人中心、 管理员账号数据维护、 基础数据维护、 短视频信息维护(包括查看短视频留言、短视频收藏)、 论坛维护(增删改查帖子信息,包括查…

uniapp微信小程序的单项选择器大小颜色的修改

问题描述&#xff1a;需要修改radio的大小和颜色&#xff0c;组件官网radio-group | uni-app官网 修改radio颜色 直接使用color属性就行了 eg. <label class"agree_label"><radio class"agree_radio" value"" click"setuserAgr…

蓝桥杯第十四届国赛B组刷题笔记

A-0子2023&#xff1a; 题目&#xff1a; 小蓝在黑板上连续写下从 11 到 20232023 之间所有的整数&#xff0c;得到了一个数字序列&#xff1a; &#x1d446;12345678910111213...20222023S12345678910111213...20222023。 小蓝想知道 &#x1d446;S 中有多少种子序列恰好等…

OneForall工具的下载安装和使用(Windows和Linux)

目录 OneForall的介绍 OneForall的下载 OneForall的安装 安装要求 安装步骤&#xff08;git 版&#xff09; 安装&#xff08;kali&#xff09; OneForall的使用命令 在Windows 在Linux&#xff08;kali&#xff09; OneForall的结果说明 免责声明 本文所提供的文字和…

databricks~Unity Catalog

Unity Catalog hierarchy 包含了用户授权管理信息和元数据信息 workspace with unity catalog hierarchy unity metastore Ref: https://www.youtube.com/playlist?listPLY-V_O-O7h4fwcHcXgkR_zTLvddvE_GfC

逆向基础:软件手动脱壳技术入门

这里整合了一下之前自己学习软件手工脱壳的一些笔记和脱文&#xff0c;希望能给新学软件逆向和脱壳的童鞋们一点帮助。 1 一些概念 1.1 加壳 加壳的全称应该是可执行程序资源压缩&#xff0c;是保护文件的常用手段。加壳过的程序可以直接运行&#xff0c;但是不能查看源代码…

内网权限提升

打点进入内网中&#xff0c;权限一般为 web 服务的权限 1、什么是提权 一般一来说是低权限用户去申请高权限用户&#xff0c;可以是&#xff08;配置不当、溢出类漏洞&#xff08;历史漏洞&#xff09;、本地漏洞&#xff09; 2、常见用户分类 windows&#xff1a; 本地登录…

神奇动物在哪里?斯洛文尼亚旅游之野生动物寻踪

不仅拥有优美动人的自然风光&#xff0c;斯洛文尼亚还以其丰富的生物多样性而闻名。得益于国家对大自然开展的保护工作&#xff0c;斯洛文尼亚超过三分之一的国土面积都被规划为保护区&#xff0c;拥有约1.5万种动物和6000种植物&#xff0c;其中不乏众多特有、稀有和濒危动植物…

[数智人文实战] 02.舆情分析之词云可视化、文本聚类和LDA主题模型文本挖掘

【数智人文与文本挖掘】知识星球建立且正式运营,欢迎新老博友和朋友加入,一起分享更多数智人文知识和交流进步。该星球计划每周至少分享7个资源或文章,包括数智人文、文本挖掘、人工智能、大数据分析和图书情报的技术文章、代码及资源。同时,欢迎进入星球的朋友咨询我图情和…

图像处理之计算物体的方向(C++)

图像处理之计算物体的方向&#xff08;C&#xff09; 文章目录 图像处理之计算物体的方向&#xff08;C&#xff09;前言一、PCA获取物体主要方向1.原理2.代码实现 二、Hu矩获取物体主要方向1.原理2.代码实现 总结 前言 在图像处理中&#xff0c;物体的方向&#xff08;倾斜角…

基于springboot+vue的班级综合测评管理系统

开发语言&#xff1a;Java框架&#xff1a;springbootJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包&#xff1a;…

OpenBMC相关的网站

openbmc官方网站 https://github.com/openbmchttps://github.com/openbmc Dashboard [Jenkins]https://jenkins.openbmc.org/ https://gerrit.openbmc.org/Gerrit Code Reviewhttps://gerrit.openbmc.org/ Searchhttps://grok.openbmc.org/ openbmc参考网站 https://www.c…

计算机组成原理易混淆知识点总结(持续更新)

目录 1.机器字长&#xff0c;存储字长与指令字长 2.指令周期,机器周期,时钟周期 3.CPI,IPS,MIPS 4.翻译程序和汇编程序 5.计算机体系结构和计算机组成的区别和联系 6.基准程序执行得越快说明机器的性能越好吗? 1.机器字长&#xff0c;存储字长与指令字长 不同的机器三者…

Git-01

Git是一个免费且开源的分布式版本控制系统&#xff0c;它可以跟踪文件的修改、记录变更的历史&#xff0c;并且在多人协作开发中提供了强大的工具和功能。 Git最初是由Linus Torvalds开发的&#xff0c;用于Linux内核的开发&#xff0c;现在已经成为了广泛使用的版本控制系统&a…