# HarryNet **Repository Path**: harryxiaocn/harry-net ## Basic Information - **Project Name**: HarryNet - **Description**: 简单的TCP即时通信实现 - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-10-30 - **Last Updated**: 2025-10-30 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # HarryNet 一个基于 VB.NET 的高性能异步 Socket 网络通信库,支持 TCP 服务器和客户端开发。 ## 特性 - 🚀 **异步操作**:使用 SocketAsyncEventArgs 实现高性能异步通信 - 📦 **数据封装**:自动处理数据封包和解包,支持多种数据类型 - 🔒 **类型安全**:内置二进制数据、字符串和加密数据传输支持 - 🎯 **简单易用**:提供简洁的 API,快速上手网络编程 - 💾 **内存高效**:使用对象池和缓冲区复用技术 - 🔄 **队列管理**:自动处理发送队列,避免数据竞争 ## 安装 直接将 `HarryNet.vb` 文件添加到您的 VB.NET 项目中即可使用。 ## 快速开始 ### 服务器端示例 ```vbnet ' 创建服务器实例 Dim server As New HarrySocketServer() ' 订阅客户端连接和数据接收事件 AddHandler server.OnAddClient, Sub() Console.WriteLine("新客户端连接") AddHandler server.OnReceivedData, Sub(id As Integer, data As Byte(), dataType As HarryDataType) If dataType = HarryDataType.STR Then Dim message = Encoding.UTF8.GetString(data) Console.WriteLine($"来自客户端 {id} 的消息: {message}") ' 回复客户端 server.SendDataToClient(id, Encoding.UTF8.GetBytes("服务器已收到")) End If End Sub ' 启动服务器监听 server.StartListen(6696) Console.WriteLine("服务器已启动,端口 6696") ``` ### 客户端示例 ```vbnet ' 创建客户端实例 Dim client As New HarrySocketClient() ' 订阅数据接收事件 AddHandler client.OnReceivedData, Sub(data As Byte(), dataType As HarryDataType) If dataType = HarryDataType.STR Then Dim message = Encoding.UTF8.GetString(data) Console.WriteLine($"来自服务器的消息: {message}") End If End Sub ' 连接到服务器 client.StartConnect("127.0.0.1", 6696) Console.WriteLine("已连接到服务器") ' 发送消息 client.SendData("Hello, Server!") ``` ## API 参考 ### HarrySocketServer 服务器类,用于创建 TCP 服务器。 **方法:** - `StartListen(Optional port As Integer = 6696)` - 启动服务器监听 - `SendDataToClient(id As Integer, data() As Byte, Optional dataType As HarryDataType = HarryDataType.BINARY)` - 向指定客户端发送数据 - `SendDataToAllClient(data() As Byte, Optional dataType As HarryDataType = HarryDataType.BINARY)` - 向所有客户端广播数据 - `SendDataToAllClient(data As String)` - 向所有客户端广播字符串 - `Broadcast(data() As Byte, Optional dataType As HarryDataType = HarryDataType.BINARY)` - 广播数据 **事件:** - `OnAddClient()` - 当有新客户端连接时触发 - `OnReceivedData(id As Integer, data As Byte(), dataType As HarryDataType)` - 当接收到客户端数据时触发 ### HarrySocketClient 客户端类,用于连接 TCP 服务器。 **方法:** - `StartConnect(Optional ip As String = "127.0.0.1", Optional port As Integer = 6696)` - 连接到服务器 - `SendData(data As Byte(), Optional dataType As HarryDataType = HarryDataType.BINARY)` - 发送二进制数据 - `SendData(data As String)` - 发送字符串数据 **事件:** - `OnReceivedData(data As Byte(), dataType As HarryDataType)` - 当接收到服务器数据时触发 ### HarryDataType 数据类型枚举: - `NONE = 0` - 无类型 - `BINARY = 1` - 二进制数据 - `STR = 2` - 字符串数据 - `ENCRYPTION = 4` - 加密数据 ## 数据协议 HarryNet 使用自定义的简单协议来封装数据: ``` [8字节: 数据长度][4字节: 数据类型][N字节: 实际数据] ``` - **数据长度**:64位整数,大端序,表示实际数据的字节长度 - **数据类型**:32位整数,大端序,表示 `HarryDataType` 枚举值 - **实际数据**:原始数据内容 ## 示例应用 ### 聊天室服务器 ```vbnet Dim chatServer As New HarrySocketServer() AddHandler chatServer.OnReceivedData, Sub(id As Integer, data As Byte(), dataType As HarryDataType) If dataType = HarryDataType.STR Then Dim message = $"[客户端{id}]: {Encoding.UTF8.GetString(data)}" Console.WriteLine(message) ' 广播给所有客户端 chatServer.Broadcast(Encoding.UTF8.GetBytes(message), HarryDataType.STR) End If End Sub chatServer.StartListen(6696) ``` ### 文件传输客户端 ```vbnet Dim fileClient As New HarrySocketClient() AddHandler fileClient.OnReceivedData, Sub(data As Byte(), dataType As HarryDataType) If dataType = HarryDataType.BINARY Then File.WriteAllBytes("received_file.dat", data) Console.WriteLine("文件接收完成") End If End Sub fileClient.StartConnect("192.168.1.100", 6696) ' 发送文件 Dim fileData As Byte() = File.ReadAllBytes("example.txt") fileClient.SendData(fileData, HarryDataType.BINARY) ``` ## 许可证 本项目采用 MIT 许可证。详见 LICENSE 文件。 ## 贡献 欢迎提交 Issue 和 Pull Request! ## 支持 如果您在使用过程中遇到问题,可以: 1. 查看代码注释和示例 2. 提交 GitHub Issue 3. 联系开发团队 ## 版本历史 - v1.0.0 (当前版本) - 基础 TCP 服务器/客户端功能 - 异步 Socket 操作 - 二进制和字符串数据传输支持 - 数据封包协议