diff --git a/NetLib/HaoYueNet.ClientNetwork/NetworkHelperCore.cs b/NetLib/HaoYueNet.ClientNetwork/NetworkHelperCore.cs index 977e689..02dea8a 100644 --- a/NetLib/HaoYueNet.ClientNetwork/NetworkHelperCore.cs +++ b/NetLib/HaoYueNet.ClientNetwork/NetworkHelperCore.cs @@ -257,36 +257,41 @@ namespace HaoYueNet.ClientNetwork OnReceiveData(CmdID, Error, resultdata); } - - MemoryStream memoryStream = new MemoryStream();//开辟一个内存流 + MemoryStream reciveMemoryStream = new MemoryStream();//开辟一个内存流 + byte[] reciveBuffer = new byte[1024 * 1024 * 2]; private void Recive(object o) { var client = o as Socket; - //MemoryStream memoryStream = new MemoryStream();//开辟一个内存流 - while (true) { - byte[] buffer = new byte[1024 * 1024 * 2]; - int effective=0; + int effective = 0; try { - effective = client.Receive(buffer); - if (effective == 0) + effective = client.Receive(reciveBuffer); + if (effective == 0)//为0表示已经断开连接 { - continue; + //清理数据 + reciveMemoryStream.SetLength(0); + reciveMemoryStream.Seek(0, SeekOrigin.Begin); + //远程主机强迫关闭了一个现有的连接 + OnCloseReady(); + return; } } catch(Exception ex) { + //清理数据 + reciveMemoryStream.SetLength(0); + reciveMemoryStream.Seek(0, SeekOrigin.Begin); + //远程主机强迫关闭了一个现有的连接 OnCloseReady(); return; //断开连接 } - - memoryStream.Write(buffer, 0, effective);//将接受到的数据写入内存流中 - byte[] getData = memoryStream.ToArray();//将内存流中的消息体写入字节数组 + reciveMemoryStream.Write(reciveBuffer, 0, effective);//将接受到的数据写入内存流中 + byte[] getData = reciveMemoryStream.ToArray();//将内存流中的消息体写入字节数组 int StartIndex = 0;//设置一个读取数据的起始下标 while (true) @@ -314,10 +319,10 @@ namespace HaoYueNet.ClientNetwork */ //流复用的方式 不用重新new申请 - memoryStream.Position = 0; - memoryStream.SetLength(0); + reciveMemoryStream.Position = 0; + reciveMemoryStream.SetLength(0); - memoryStream.Write(getData, StartIndex, getData.Length - StartIndex);//从新将接受的消息写入内存流 + reciveMemoryStream.Write(getData, StartIndex, getData.Length - StartIndex);//从新将接受的消息写入内存流 break; } else @@ -334,14 +339,13 @@ namespace HaoYueNet.ClientNetwork //用Span Span getData_span = getData; - getData_span = getData_span.Slice(StartIndex + 4,CoreLenght); + getData_span = getData_span.Slice(StartIndex + 4, CoreLenght); DataCallBackReady(getData_span.ToArray()); StartIndex += HeadLength;//当读取一条完整的数据后,读取数据的起始下标应为当前接受到的消息体的长度(当前数据的尾部或下一条消息的首部) } } } - } } diff --git a/NetLib/HaoYueNet.ClientNetwork/OtherMode/NetworkHelperCore_ListenerMode.cs b/NetLib/HaoYueNet.ClientNetwork/OtherMode/NetworkHelperCore_ListenerMode.cs index be178e1..10d359b 100644 --- a/NetLib/HaoYueNet.ClientNetwork/OtherMode/NetworkHelperCore_ListenerMode.cs +++ b/NetLib/HaoYueNet.ClientNetwork/OtherMode/NetworkHelperCore_ListenerMode.cs @@ -189,39 +189,45 @@ namespace HaoYueNet.ClientNetwork.OtherMode OnReceive(socket,data); } + MemoryStream reciveMemoryStream = new MemoryStream();//开辟一个内存流 + byte[] reciveBuffer = new byte[1024 * 1024 * 2]; private void Recive(object o) { - MemoryStream memoryStream = new MemoryStream();//开辟一个内存流 var client = o as Socket; - //MemoryStream memoryStream = new MemoryStream();//开辟一个内存流 while (true) { - byte[] buffer = new byte[1024 * 1024 * 2]; int effective = 0; try { - effective = client.Receive(buffer); - if (effective == 0) + effective = client.Receive(reciveBuffer); + if (effective == 0)//为0表示已经断开连接,放到后面处理 { - continue; + //清理数据 + reciveMemoryStream.SetLength(0); + reciveMemoryStream.Seek(0, SeekOrigin.Begin); + //远程主机强迫关闭了一个现有的连接 + OnCloseReady(client); + return; } } catch (Exception ex) { + //清理数据 + reciveMemoryStream.SetLength(0); + reciveMemoryStream.Seek(0, SeekOrigin.Begin); + //远程主机强迫关闭了一个现有的连接 OnCloseReady(client); return; //断开连接 } - if (effective > 0)//如果接受到的消息不为0(不为空) - { - memoryStream.Write(buffer, 0, effective);//将接受到的数据写入内存流中 - DataCallBackReady(client, memoryStream.ToArray()); - //流复用的方式 不用重新new申请 - memoryStream.Position = 0; - memoryStream.SetLength(0); - } + + reciveMemoryStream.Write(reciveBuffer, 0, effective);//将接受到的数据写入内存流中 + DataCallBackReady(client, reciveMemoryStream.ToArray()); + //流复用的方式 不用重新new申请 + reciveMemoryStream.Position = 0; + reciveMemoryStream.SetLength(0); } } diff --git a/NetLib/HaoYueNet.ClientNetwork/OtherMode/NetworkHelperCore_SourceMode.cs b/NetLib/HaoYueNet.ClientNetwork/OtherMode/NetworkHelperCore_SourceMode.cs index 3cd0160..a5a5884 100644 --- a/NetLib/HaoYueNet.ClientNetwork/OtherMode/NetworkHelperCore_SourceMode.cs +++ b/NetLib/HaoYueNet.ClientNetwork/OtherMode/NetworkHelperCore_SourceMode.cs @@ -192,39 +192,44 @@ namespace HaoYueNet.ClientNetwork.OtherMode OnReceiveData(data); } - MemoryStream memoryStream = new MemoryStream();//开辟一个内存流 + MemoryStream reciveMemoryStream = new MemoryStream();//开辟一个内存流 + byte[] reciveBuffer = new byte[1024 * 1024 * 2]; private void Recive(object o) { var client = o as Socket; - //MemoryStream memoryStream = new MemoryStream();//开辟一个内存流 - while (true) { - byte[] buffer = new byte[1024 * 1024 * 2]; int effective = 0; try { - effective = client.Receive(buffer); - if (effective == 0) + effective = client.Receive(reciveBuffer); + if (effective == 0)//为0表示已经断开连接,放到后面处理 { - continue; + //尝试性,清理数据 + reciveMemoryStream.SetLength(0); + reciveMemoryStream.Seek(0, SeekOrigin.Begin); + //远程主机强迫关闭了一个现有的连接 + OnCloseReady(); + return; } } catch (Exception ex) { + //尝试性,清理数据 + reciveMemoryStream.SetLength(0); + reciveMemoryStream.Seek(0, SeekOrigin.Begin); + + //断开连接 //远程主机强迫关闭了一个现有的连接 OnCloseReady(); return; - //断开连接 - } - if (effective > 0)//如果接受到的消息不为0(不为空) - { - memoryStream.Write(buffer, 0, effective);//将接受到的数据写入内存流中 - DataCallBackReady(memoryStream.ToArray()); - //流复用的方式 不用重新new申请 - memoryStream.Position = 0; - memoryStream.SetLength(0); } + + reciveMemoryStream.Write(reciveBuffer, 0, effective);//将接受到的数据写入内存流中 + DataCallBackReady(reciveMemoryStream.ToArray()); + //流复用的方式 不用重新new申请 + reciveMemoryStream.Position = 0; + reciveMemoryStream.SetLength(0); } } diff --git a/NetLib/HaoYueNet.ServerNetwork/NetWork/SourceMode/TcpSaeaServer_SourceMode.cs b/NetLib/HaoYueNet.ServerNetwork/NetWork/SourceMode/TcpSaeaServer_SourceMode.cs index 26dba2b..4ed8553 100644 --- a/NetLib/HaoYueNet.ServerNetwork/NetWork/SourceMode/TcpSaeaServer_SourceMode.cs +++ b/NetLib/HaoYueNet.ServerNetwork/NetWork/SourceMode/TcpSaeaServer_SourceMode.cs @@ -414,7 +414,7 @@ namespace HaoYueNet.ServerNetwork } else { - //尝试性,清理数据 + //清理数据 token.memoryStream.SetLength(0); token.memoryStream.Seek(0, SeekOrigin.Begin);