2025-09-27 14:24:18 +08:00
|
|
|
|
#ifndef CC_NETWORK_H
|
|
|
|
|
|
#define CC_NETWORK_H
|
|
|
|
|
|
|
2025-09-30 16:24:15 +08:00
|
|
|
|
#include "Socket/CCSocket.h"
|
2025-09-27 14:24:18 +08:00
|
|
|
|
#include "CC.h"
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* @namespace CTL
|
|
|
|
|
|
* @brief 该命名空间包含与网络通信相关的类和函数。
|
|
|
|
|
|
*/
|
|
|
|
|
|
namespace CTL {
|
|
|
|
|
|
/**
|
|
|
|
|
|
* @class Packets
|
|
|
|
|
|
* @brief Packets 类用于封装数据包和主机信息,以便进行网络传输。
|
|
|
|
|
|
*/
|
|
|
|
|
|
class Packets {
|
|
|
|
|
|
public:
|
|
|
|
|
|
ByteArray data{}; /**< @brief 存储数据包的字节数据。 */
|
|
|
|
|
|
CCHostInfo info{}; /**< @brief 存储数据包的源主机信息。 */
|
|
|
|
|
|
public:
|
|
|
|
|
|
/**
|
|
|
|
|
|
* @brief 默认构造函数,初始化数据包长度为 1024。
|
|
|
|
|
|
*/
|
|
|
|
|
|
Packets() {
|
|
|
|
|
|
length = 1024;
|
|
|
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
|
|
|
* @brief 带参数的构造函数。
|
|
|
|
|
|
* @param len 指定的数据包长度。
|
|
|
|
|
|
* @param host 主机信息,默认为 "0.0.0.0:0"。
|
|
|
|
|
|
*/
|
|
|
|
|
|
explicit Packets(const ByteHander len, const CCHostInfo& host = {"0.0.0.0", 0}) {
|
|
|
|
|
|
length = len;
|
|
|
|
|
|
info = host;
|
|
|
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
|
|
|
* @brief 获取当前数据包的长度。
|
|
|
|
|
|
* @return 返回数据的大小。
|
|
|
|
|
|
*/
|
|
|
|
|
|
[[nodiscard]] ByteHander GetLength() const {
|
|
|
|
|
|
return data.size();
|
|
|
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
|
|
|
* @brief 将数据包内容转换为字符串对象。
|
|
|
|
|
|
* @return 返回数据包内容的字符串表示形式。
|
|
|
|
|
|
*/
|
|
|
|
|
|
String to_String() const;
|
|
|
|
|
|
/**
|
|
|
|
|
|
* @brief 将数据包内容转换为字符串对象并清空原始数据包内容。
|
|
|
|
|
|
* @return 返回数据包内容的字符串表示形式。
|
|
|
|
|
|
*/
|
|
|
|
|
|
String to_String();
|
|
|
|
|
|
private:
|
|
|
|
|
|
ByteHander length = 0; /**< @brief 存储数据包的长度。 */
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* @class Network
|
|
|
|
|
|
* @brief Network 类用于管理网络连接和数据传输,继承自 Socket 类。
|
|
|
|
|
|
*/
|
|
|
|
|
|
class Network : public Socket {
|
|
|
|
|
|
public:
|
|
|
|
|
|
using Socket::Socket; /**< @brief 继承 Socket 类的构造函数。 */
|
|
|
|
|
|
public:
|
|
|
|
|
|
/**
|
|
|
|
|
|
* @brief 使用 Socket 对象构造。
|
|
|
|
|
|
* @param sock 用于初始化 Network 对象的 Socket 对象。
|
|
|
|
|
|
*/
|
|
|
|
|
|
Network(const Socket& sock);
|
|
|
|
|
|
/**
|
|
|
|
|
|
* @brief 复制构造函数。
|
|
|
|
|
|
* @param sock 要复制的 Network 对象。
|
|
|
|
|
|
*/
|
|
|
|
|
|
Network(const Network& sock);
|
|
|
|
|
|
/**
|
|
|
|
|
|
* @brief 使用 Socket 对象构造。
|
|
|
|
|
|
* @param sock 用于初始化 Network 对象的 Socket 对象。
|
|
|
|
|
|
*/
|
|
|
|
|
|
Network(Socket& sock);
|
|
|
|
|
|
/**
|
|
|
|
|
|
* @brief 复制构造函数。
|
|
|
|
|
|
* @param sock 要复制的 Network 对象。
|
|
|
|
|
|
*/
|
|
|
|
|
|
Network(Network& sock);
|
|
|
|
|
|
/**
|
|
|
|
|
|
* @brief 指定端口和网络类型构造。
|
|
|
|
|
|
* @param Port 要绑定的端口号。
|
|
|
|
|
|
* @param toru 网络类型,默认为 TCP。
|
|
|
|
|
|
* @param ip IP 版本,默认为 IPV4。
|
|
|
|
|
|
*/
|
|
|
|
|
|
explicit Network(int Port, TORU toru = TCP, IPVX ip = IPV4);
|
|
|
|
|
|
/**
|
|
|
|
|
|
* @brief 仅指定网络类型构造。
|
|
|
|
|
|
* @param toru 网络类型,默认为 TCP。
|
|
|
|
|
|
* @param ip IP 版本,默认为 IPV4。
|
|
|
|
|
|
*/
|
|
|
|
|
|
explicit Network(TORU toru = TCP, IPVX ip = IPV4);
|
|
|
|
|
|
/**
|
|
|
|
|
|
* @brief 使用指定的类型和 IP 版本初始化网络。
|
|
|
|
|
|
* @param toru 网络类型,默认为 TCP。
|
|
|
|
|
|
* @param ip IP 版本,默认为 IPV4。
|
|
|
|
|
|
*/
|
|
|
|
|
|
void Initialize(TORU toru = TCP, IPVX ip = IPV4);
|
|
|
|
|
|
/**
|
|
|
|
|
|
* @brief 绑定到指定地址和端口。
|
|
|
|
|
|
* @param address 要绑定的网络地址。
|
|
|
|
|
|
* @param Port 要绑定的端口号,默认为 0。
|
|
|
|
|
|
* @return 成功返回 true,否则返回 false。
|
|
|
|
|
|
*/
|
|
|
|
|
|
bool Bind(CCAddress address, unsigned short Port = 0);
|
|
|
|
|
|
/**
|
|
|
|
|
|
* @brief 绑定到指定 IP 和端口。
|
|
|
|
|
|
* @param IP 要绑定的 IP 地址。
|
|
|
|
|
|
* @param Port 要绑定的端口号。
|
|
|
|
|
|
* @return 成功返回 true,否则返回 false。
|
|
|
|
|
|
*/
|
|
|
|
|
|
bool Bind(const CTL::String& IP, unsigned short Port);
|
|
|
|
|
|
/**
|
|
|
|
|
|
* @brief 连接到指定 IP 和端口。
|
|
|
|
|
|
* @param IP 要连接的 IP 地址。
|
|
|
|
|
|
* @param Port 要连接的端口号。
|
|
|
|
|
|
* @return 成功返回 true,否则返回 false。
|
|
|
|
|
|
*/
|
|
|
|
|
|
bool Connect(const CTL::String& IP, unsigned short Port);
|
|
|
|
|
|
/**
|
|
|
|
|
|
* @brief 接收数据包。
|
|
|
|
|
|
* @param packets 接收到的数据包。
|
|
|
|
|
|
* @return 成功返回 true,否则返回 false。
|
|
|
|
|
|
*/
|
|
|
|
|
|
bool ReceiveData(Packets& packets);
|
|
|
|
|
|
/**
|
|
|
|
|
|
* @brief 发送数据包。
|
|
|
|
|
|
* @param packets 要发送的数据包。
|
|
|
|
|
|
* @return 成功返回 true,否则返回 false。
|
|
|
|
|
|
*/
|
|
|
|
|
|
bool SendPackets(Packets& packets);
|
|
|
|
|
|
private:
|
|
|
|
|
|
TORU TorU_ = TCP; /**< @brief 存储当前网络类型,默认为 TCP。 */
|
|
|
|
|
|
};
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#endif
|