From 84699708d554fc709786481e0e160313b66932d3 Mon Sep 17 00:00:00 2001 From: SikongJueluo Date: Tue, 15 Apr 2025 21:38:06 +0800 Subject: [PATCH] try to fix bug --- server.test/UDPServerTest.cs | 57 ++++++++++++++++++++++++++++++++++-- server/src/UdpClientPool.cs | 14 ++++++++- server/src/UdpServer.cs | 6 ++-- 3 files changed, 71 insertions(+), 6 deletions(-) diff --git a/server.test/UDPServerTest.cs b/server.test/UDPServerTest.cs index cc7a80e..1bbfad9 100644 --- a/server.test/UDPServerTest.cs +++ b/server.test/UDPServerTest.cs @@ -1,7 +1,29 @@ -namespace server.test.UDPServer; +using System.Net; +using System.Reflection; +using System.Text; +using Xunit.Sdk; -public class UnitTest1 +namespace server.test; + +[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = false, Inherited = true)] +public class UDPServerTest : BeforeAfterTestAttribute { + const string address = "127.0.0.1"; + const int port = 1234; + private static readonly UDPServer udpServer = new UDPServer(port); + + public override void Before(MethodInfo methodUnderTest) + { + udpServer.Start(); + Console.WriteLine("Start UDP Server"); + } + + public override void After(MethodInfo methodUnderTest) + { + udpServer.Stop(); + Console.WriteLine("Stop UDP Server"); + } + [Fact] public void UDPDataDeepClone() { @@ -33,4 +55,35 @@ public class UnitTest1 Assert.NotEqual(udpData.Data, cloneUdpData.Data); Assert.NotEqual(udpData.HasRead, cloneUdpData.HasRead); } + + [Theory] + [InlineData("Hello World!")] + [InlineData("Hello Server!")] + public async Task UDPServerFind(string text) + { + var serverEP = new IPEndPoint(IPAddress.Parse(address), port); + + + + Assert.True(UDPClientPool.SendString(serverEP, [text])); + { + var ret = udpServer.FindData(address); + Assert.True(ret.HasValue); + var data = ret.Value; + Assert.Equal(data.Address, address); + Assert.Equal(data.Port, port); + Assert.Equal(Encoding.ASCII.GetString(data.Data), text); + } + + + Assert.True(await UDPClientPool.SendStringAsync(serverEP, [text])); + { + var ret = await udpServer.FindDataAsync(address); + Assert.True(ret.HasValue); + var data = ret.Value; + Assert.Equal(data.Address, address); + Assert.Equal(data.Port, port); + Assert.Equal(Encoding.ASCII.GetString(data.Data), text); + } + } } diff --git a/server/src/UdpClientPool.cs b/server/src/UdpClientPool.cs index 17d52a4..0d1815a 100644 --- a/server/src/UdpClientPool.cs +++ b/server/src/UdpClientPool.cs @@ -2,7 +2,7 @@ using System.Net; using System.Net.Sockets; using System.Text; -class UDPClientPool +public class UDPClientPool { private static IPAddress localhost = IPAddress.Parse("127.0.0.1"); @@ -13,6 +13,8 @@ class UDPClientPool byte[] sendbuf = Encoding.ASCII.GetBytes(stringArray[0]); var sendLen = socket.SendTo(sendbuf, endPoint); + socket.Close(); + if (sendLen == stringArray[0].Length) { return true; } else { return false; } } @@ -26,6 +28,8 @@ class UDPClientPool { Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); var sendLen = socket.SendTo(buf, endPoint); + socket.Close(); + if (sendLen == buf.Length) { return true; } else { return false; } } @@ -40,6 +44,8 @@ class UDPClientPool Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); var sendBytes = pkg.ToBytes(); var sendLen = socket.SendTo(sendBytes, endPoint); + socket.Close(); + if (sendLen == sendBytes.Length) { return true; } else { return false; } } @@ -54,6 +60,8 @@ class UDPClientPool Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); var sendBytes = pkg.ToBytes(); var sendLen = socket.SendTo(sendBytes, endPoint); + socket.Close(); + if (sendLen == sendBytes.Length) { return true; } else { return false; } } @@ -71,6 +79,8 @@ class UDPClientPool IPEndPoint ep = new IPEndPoint(localhost, port); var sendLen = socket.SendTo(sendBytes, ep); + socket.Close(); + if (sendLen == sendBytes.Length) { return true; } else { return false; } } @@ -87,5 +97,7 @@ class UDPClientPool Thread.Sleep(sleepMilliSeconds); } + + socket.Close(); } } diff --git a/server/src/UdpServer.cs b/server/src/UdpServer.cs index d3d480d..aad8993 100644 --- a/server/src/UdpServer.cs +++ b/server/src/UdpServer.cs @@ -92,7 +92,7 @@ public class UDPServer { Console.WriteLine(e.ToString()); throw new ArgumentException( - $"Not currect port num: {port}", + $"Failed to set up server with this port: {port}", nameof(port) ); } @@ -143,7 +143,7 @@ public class UDPServer } else { - return Optional.Some((UDPData)data); + return Optional.Some((UDPData)data.DeepClone()); } } @@ -196,7 +196,7 @@ public class UDPServer } else { - return Optional.Some((UDPData)data); + return Optional.Some((UDPData)data.DeepClone()); } }