MFC Winsock 类:MFC 中的网络编程

目录

概述

一.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.mzph.cn/web/15813.shtml

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

相关文章

Maven多环境打包配置

一、启动时指定环境配置文件 在启动springboot应用的jar包时,我们可以指定配置文件,通常把配置文件上传到linux服务器对应jar包的同级目录,或者统一的配置文件存放目录 java -jar your-app.jar --spring.config.location/opt/softs/applicat…

matlab 图像的中值滤波

目录 一、功能概述1、算法概述2、主要函数3、计算公式二、代码实现三、结果展示四、参考链接本文由CSDN点云侠翻译,放入付费专栏只为防不要脸的爬虫。专栏值钱的不是本文,切勿因本文而订阅。 一、功能概述 1、算法概述 中值滤波是图像处理中一种常用的非线性运算,用于减少…

间接平差——以水准网平差为例 (python详细过程版)

目录 一、原理概述二、案例分析三、代码实现四、结果展示本文由CSDN点云侠原创,间接平差——以水准网平差为例 (python详细过程版),爬虫自重。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的爬虫与GPT生成的文章。 一、原理概述 间接平差的函数模型和随机模型…

openai api的初次尝试

不懂已经不去百度了,现在直接问chatgpt就解决绝大多数问题了。 OpenAI API目前还没有官方支持的npm库,但是您可以使用现有的第三方npm库进行OpenAI API的访问和使用。这里提供一个npm库 openai-node 的安装和使用方法: 在命令行或终端中使用…

Util和utils

Util FieldStats 这段代码定义了一个名为FieldStats的Java类,位于com.cqupt.software_1.Util包中。它使用了lombok库的Data和AllArgsConstructor注解,这些注解帮助生成了getter、setter、toString等方法,以及包含所有参数的构造函数。类中有…

区块链会议投稿资讯CCF A--USENIX Security 2025 截止9.4、1.22 附录用率

会议名称:34th USENIX Security Symposium CCF等级:CCF A类学术会议 类别:网络与信息安全 录用率:2023年接收率29%,2024录用的区块链相关文章请查看 Symposium Topics System security Operating systems security …

vue实现可拖拽移动悬浮球

封装悬浮球组件&#xff0c;文件名s-icons.vue <template><div ref"icons" class"icons-container" :style"{ left: left px, top: top px }"><slot></slot></div> </template> <script> export …

国产化服务器开启NTP功能并向NTP时钟服务器同步

1.备份/etc/chrony.conf文件&#xff1b; cp -rp /etc/chrony.conf /etc/chrony.conf.bak.20240522 2.修改chrony.conf文件&#xff0c;增加NTP时钟信息。&#xff08;客户端填写时钟同步服务器的IP地址或者域名&#xff0c;我这里写的IP地址。下面Allow NTP Client是只允许…

Mysql 的 binlog 有几种格式?

MySQL 的二进制日志&#xff08;binlog&#xff09;有三种格式&#xff0c;每种格式都有其特定的用途和优缺点。以下是详细描述&#xff1a; 1. STATEMENT 描述: 记录的是 SQL 语句。特点: 每条更改数据的 SQL 语句都会记录在 binlog 中。相对较小&#xff0c;因为只记录了 S…

数字图像处理冈塞雷斯第四版课后习题答案【英文原版】

第二章 第三章 . 第四章 傅里叶变换是一个线性过程&#xff0c;而计算梯度的平方根和平方根则是非线性运算。傅里叶变换可以用来计算微分的差值(如问题4.50)&#xff0c;但必须在空间域中直接计算平方和平方根值。 (a)实际上&#xff0c;由于高通操作&#xff0c;环有一个暗中心…

在已创建的git工程中添加.gitignore

有些代码创建git时&#xff0c;为了方便将所有文件都加入了git管理&#xff0c;但实际有些库的Makefile文件和编译目录的文件不需要加入管理&#xff0c;否则每次提交或编译后&#xff0c;git diff将看到非常多的冗余信息。而我们修改的核心代码都淹没在这些大量无用的信息里面…

Golang:gammazero/deque是一个快速环形缓冲区deque(双端队列)实现

gammazero/deque是一个快速环形缓冲区deque&#xff08;双端队列&#xff09;实现。 文档 https://github.com/gammazero/deque 安装 go get github.com/gammazero/deque代码示例 先入先出队列 package mainimport ("fmt""github.com/gammazero/deque&quo…

留守儿童|基于SprinBoot+vue的留守儿童爱心网站(源码+数据库+文档)

留守儿童爱心网站 目录 基于SprinBootvue的留守儿童爱心网站 一、前言 二、系统设计 三、系统功能设计 1系统功能模块 2管理员功能模块 3用户功能模块 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取&#xff1a; 博主介绍&…

STM_HAL_TIM_IC_(输入捕获,捕获PWM波)

介绍 TM32微控制器提供了输入捕获&#xff08;Input Capture&#xff09;功能&#xff0c;这是一种用于精确测量外部信号脉冲宽度和周期的强大技术。输入捕获通常与定时器&#xff08;如TIM&#xff09;的高级控制定时器&#xff08;TIM1和TIM8&#xff09;或通用定时器&#…

MySQL之Schema与数据类型优化和创建高性能的索引(一)

Schema与数据类型优化 只修改.frm文件 从前面的例子中可以看到修改表的.frm文件是很快的&#xff0c;但MySQL有时候会在没有必要的时候也重建.如果愿意冒一些风险&#xff0c;可以让MySQL做一些其他类型的修改而不用重建表。下面这些操作是有可能不需要重建表的: 1.移除(不是…

JavaEE-文件IO2

文章目录 前言一、字节流1.1 读文件1.2 写文件 二、字符流2.1 读文件2.2 写文件 三、文件IO三道例题 前言 在这里对Java标准库中对文件内容的操作进行总结&#xff0c;总体上分为两部分&#xff0c;字节流和字符流&#xff0c;就是以字节为单位读取文件和以字符为单位读取文件…

[AI Google] 介绍 VideoFX,以及 ImageFX 和 MusicFX 的新功能

VideoFX 是来自 labs.google 的最新实验&#xff0c;您可以查看音乐效果和图像效果的新更新&#xff0c;现在在 110 多个国家可用。 生成式媒体正在改变人们构思创意并增强我们的创造力能力的方式。我们致力于与创作者和艺术家合作构建人工智能&#xff0c;以更好地理解这些生成…

cmake使用交叉编译工具链并验证

目录 一、内容 二、配置 1. 准备cmake文件 2. 使用交叉编译 三、验证 1. 构建阶段验证 2. 编译阶段验证 一、内容 目的&#xff1a;在X86环境下编译ARM平台软件 编写交叉编译配置文件&#xff1a;xx.cmake 执行cmake命令时指定&#xff1a;cmake \ -DCMAKE_TOOLCHAIN_F…

Linux Crontab:看完这篇,还有啥不懂的吗

在Linux系统管理中&#xff0c;自动化是一个至关重要的概念&#xff0c;它可以帮助我们节省时间、减少错误并提高效率。crontab> 是实现这一目标的强大工具&#xff0c;它允许我们安排任务在特定的时间自动执行。本文将详细介绍 crontab 的基础概念、语法、命令、高级技巧以…

K8S认证|CKA题库+答案| 12. 查看Pod日志

目录 12、查看Pod日志 CKA v1.29.0模拟系统免费下载试用&#xff1a; 题目&#xff1a; 开始操作&#xff1a; 1&#xff09;、切换集群 2&#xff09;、提取错误日志 3&#xff09;、验证提取结果 12、查看Pod日志 CKA v1.29.0模拟系统免费下载试用&#xff1a; 百度…