规整代码

This commit is contained in:
sin365 2025-11-05 11:52:07 +08:00
parent 8fd9761eb2
commit 67f9c51d6f
3 changed files with 29 additions and 15 deletions

View File

@ -6,4 +6,7 @@
<!--避免 错误 CS8630 无效的 nullable 值: C# 7.3 的“Enable”。请使用语言版本 8.0 或更高版本 --> <!--避免 错误 CS8630 无效的 nullable 值: C# 7.3 的“Enable”。请使用语言版本 8.0 或更高版本 -->
<LangVersion>8.0</LangVersion> <LangVersion>8.0</LangVersion>
</PropertyGroup> </PropertyGroup>
<ItemGroup>
<PackageReference Include="System.Memory" Version="4.5.5" />
</ItemGroup>
</Project> </Project>

View File

@ -1,4 +1,5 @@
using System; using System;
using System.Buffers;
using System.Collections.Generic; using System.Collections.Generic;
using System.IO; using System.IO;
using System.Linq; using System.Linq;
@ -6,13 +7,14 @@ using System.Net;
using System.Net.Sockets; using System.Net.Sockets;
using System.Threading; using System.Threading;
using System.Threading.Tasks; using System.Threading.Tasks;
using static HaoYueNet.ClientNetwork.BaseData;
namespace HaoYueNet.ClientNetwork.Standard2.OtherMode namespace HaoYueNet.ClientNetwork.OtherMode
{ {
public class NetworkHelperCore_ListenerMode public class NetworkHelperCore_ListenerMode
{ {
private Socket serversocket; private Socket serversocket;
private Dictionary<nint, Socket> mDictHandleClient; private Dictionary<IntPtr, Socket> mDictHandleClient;
//响应倒计时计数最大值 //响应倒计时计数最大值
private static int MaxRevIndexNum = 50; private static int MaxRevIndexNum = 50;
@ -31,12 +33,12 @@ namespace HaoYueNet.ClientNetwork.Standard2.OtherMode
public static int LastConnectPort; public static int LastConnectPort;
public bool bDetailedLog = false; public bool bDetailedLog = false;
public void Init(int port) public void Init(int port, AddressFamily addressFamily = AddressFamily.InterNetwork)
{ {
mDictHandleClient = new Dictionary<nint, Socket>(); mDictHandleClient = new Dictionary<IntPtr, Socket>();
LogOut("==>初始化NetworkHelperCore_ListenerMode"); LogOut("==>初始化NetworkHelperCore_ListenerMode");
serversocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); serversocket = new Socket(addressFamily, SocketType.Stream, ProtocolType.Tcp);
IPEndPoint endPoint = new IPEndPoint(IPAddress.Any, port); IPEndPoint endPoint = new IPEndPoint(IPAddress.Any, port);
serversocket.Bind(endPoint); // 绑定 serversocket.Bind(endPoint); // 绑定
serversocket.Listen(1); serversocket.Listen(1);
@ -101,7 +103,7 @@ namespace HaoYueNet.ClientNetwork.Standard2.OtherMode
~NetworkHelperCore_ListenerMode() ~NetworkHelperCore_ListenerMode()
{ {
nint[] keys = mDictHandleClient.Keys.ToArray(); IntPtr[] keys = mDictHandleClient.Keys.ToArray();
for (uint i = 0; i < keys.Length; i++) for (uint i = 0; i < keys.Length; i++)
{ {
mDictHandleClient[keys[i]].Close(); mDictHandleClient[keys[i]].Close();
@ -195,17 +197,20 @@ namespace HaoYueNet.ClientNetwork.Standard2.OtherMode
} }
MemoryStream reciveMemoryStream = new MemoryStream();//开辟一个内存流 MemoryStream reciveMemoryStream = new MemoryStream();//开辟一个内存流
byte[] reciveBuffer = new byte[1024 * 1024 * 2]; //byte[] reciveBuffer = new byte[1024 * 1024 * 2];
private void Recive(object o) private void Recive(object o)
{ {
var client = o as Socket; var client = o as Socket;
while (true) while (true)
{ {
//申请byte池 一定要记得回收!!
byte[] rev_fromArrayPool = ArrayPool<byte>.Shared.Rent(1024 * 1024 * 2);
int effective = 0; int effective = 0;
try try
{ {
effective = client.Receive(reciveBuffer); effective = client.Receive(rev_fromArrayPool);
if (effective == 0)//为0表示已经断开连接放到后面处理 if (effective == 0)//为0表示已经断开连接放到后面处理
{ {
//清理数据 //清理数据
@ -213,6 +218,8 @@ namespace HaoYueNet.ClientNetwork.Standard2.OtherMode
reciveMemoryStream.Seek(0, SeekOrigin.Begin); reciveMemoryStream.Seek(0, SeekOrigin.Begin);
//远程主机强迫关闭了一个现有的连接 //远程主机强迫关闭了一个现有的连接
OnCloseReady(client); OnCloseReady(client);
//回收
ArrayPool<byte>.Shared.Return(rev_fromArrayPool);
return; return;
} }
} }
@ -228,7 +235,11 @@ namespace HaoYueNet.ClientNetwork.Standard2.OtherMode
//断开连接 //断开连接
} }
reciveMemoryStream.Write(reciveBuffer, 0, effective);//将接受到的数据写入内存流中 reciveMemoryStream.Write(rev_fromArrayPool, 0, effective);//将接受到的数据写入内存流中
//回收
ArrayPool<byte>.Shared.Return(rev_fromArrayPool);
DataCallBackReady(client, reciveMemoryStream.ToArray()); DataCallBackReady(client, reciveMemoryStream.ToArray());
//流复用的方式 不用重新new申请 //流复用的方式 不用重新new申请
reciveMemoryStream.Position = 0; reciveMemoryStream.Position = 0;

View File

@ -3,9 +3,9 @@ using System.IO;
using System.Net; using System.Net;
using System.Net.Sockets; using System.Net.Sockets;
using System.Threading; using System.Threading;
using static HaoYueNet.ClientNetwork.Standard2.BaseData; using static HaoYueNet.ClientNetwork.BaseData;
namespace HaoYueNet.ClientNetwork.Standard2.OtherMode namespace HaoYueNet.ClientNetwork.OtherMode
{ {
public class NetworkHelperCore_SourceMode public class NetworkHelperCore_SourceMode
{ {
@ -35,7 +35,7 @@ namespace HaoYueNet.ClientNetwork.Standard2.OtherMode
public static int LastConnectPort; public static int LastConnectPort;
public bool bDetailedLog = false; public bool bDetailedLog = false;
public bool Init(string IP, int port, bool isHadDetailedLog = true, bool bBindReuseAddress = false, int bBindport = 0) public bool Init(string IP, int port, bool isHadDetailedLog = true, bool bBindReuseAddress = false, int bBindport = 0, AddressFamily addressFamily = AddressFamily.InterNetwork)
{ {
LogOut("==>初始化网络核心"); LogOut("==>初始化网络核心");
@ -43,7 +43,7 @@ namespace HaoYueNet.ClientNetwork.Standard2.OtherMode
RevIndex = MaxRevIndexNum; RevIndex = MaxRevIndexNum;
SendIndex = MaxSendIndexNum; SendIndex = MaxSendIndexNum;
client = new Socket(SocketType.Stream, ProtocolType.Tcp); client = new Socket(addressFamily, SocketType.Stream, ProtocolType.Tcp);
if (bBindReuseAddress) if (bBindReuseAddress)
{ {
client.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true); client.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true);
@ -195,8 +195,8 @@ namespace HaoYueNet.ClientNetwork.Standard2.OtherMode
OnReceiveData(data); OnReceiveData(data);
} }
MemoryStream reciveMemoryStream = new MemoryStream();//开辟一个内存流 MemoryStream reciveMemoryStream = new MemoryStream();//开辟一个反复使用的内存流
byte[] reciveBuffer = new byte[1024 * 1024 * 2]; byte[] reciveBuffer = new byte[1024 * 1024 * 2];//开辟一个反复使用的byte[]
private void Recive(object o) private void Recive(object o)
{ {
var client = o as Socket; var client = o as Socket;