try to fix bug

This commit is contained in:
SikongJueluo 2025-04-15 21:38:06 +08:00
parent e8ec4c2a86
commit 84699708d5
No known key found for this signature in database
3 changed files with 71 additions and 6 deletions

View File

@ -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] [Fact]
public void UDPDataDeepClone() public void UDPDataDeepClone()
{ {
@ -33,4 +55,35 @@ public class UnitTest1
Assert.NotEqual(udpData.Data, cloneUdpData.Data); Assert.NotEqual(udpData.Data, cloneUdpData.Data);
Assert.NotEqual(udpData.HasRead, cloneUdpData.HasRead); 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);
}
}
} }

View File

@ -2,7 +2,7 @@ using System.Net;
using System.Net.Sockets; using System.Net.Sockets;
using System.Text; using System.Text;
class UDPClientPool public class UDPClientPool
{ {
private static IPAddress localhost = IPAddress.Parse("127.0.0.1"); private static IPAddress localhost = IPAddress.Parse("127.0.0.1");
@ -13,6 +13,8 @@ class UDPClientPool
byte[] sendbuf = Encoding.ASCII.GetBytes(stringArray[0]); byte[] sendbuf = Encoding.ASCII.GetBytes(stringArray[0]);
var sendLen = socket.SendTo(sendbuf, endPoint); var sendLen = socket.SendTo(sendbuf, endPoint);
socket.Close();
if (sendLen == stringArray[0].Length) { return true; } if (sendLen == stringArray[0].Length) { return true; }
else { return false; } else { return false; }
} }
@ -26,6 +28,8 @@ class UDPClientPool
{ {
Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
var sendLen = socket.SendTo(buf, endPoint); var sendLen = socket.SendTo(buf, endPoint);
socket.Close();
if (sendLen == buf.Length) { return true; } if (sendLen == buf.Length) { return true; }
else { return false; } else { return false; }
} }
@ -40,6 +44,8 @@ class UDPClientPool
Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
var sendBytes = pkg.ToBytes(); var sendBytes = pkg.ToBytes();
var sendLen = socket.SendTo(sendBytes, endPoint); var sendLen = socket.SendTo(sendBytes, endPoint);
socket.Close();
if (sendLen == sendBytes.Length) { return true; } if (sendLen == sendBytes.Length) { return true; }
else { return false; } else { return false; }
} }
@ -54,6 +60,8 @@ class UDPClientPool
Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
var sendBytes = pkg.ToBytes(); var sendBytes = pkg.ToBytes();
var sendLen = socket.SendTo(sendBytes, endPoint); var sendLen = socket.SendTo(sendBytes, endPoint);
socket.Close();
if (sendLen == sendBytes.Length) { return true; } if (sendLen == sendBytes.Length) { return true; }
else { return false; } else { return false; }
} }
@ -71,6 +79,8 @@ class UDPClientPool
IPEndPoint ep = new IPEndPoint(localhost, port); IPEndPoint ep = new IPEndPoint(localhost, port);
var sendLen = socket.SendTo(sendBytes, ep); var sendLen = socket.SendTo(sendBytes, ep);
socket.Close();
if (sendLen == sendBytes.Length) { return true; } if (sendLen == sendBytes.Length) { return true; }
else { return false; } else { return false; }
} }
@ -87,5 +97,7 @@ class UDPClientPool
Thread.Sleep(sleepMilliSeconds); Thread.Sleep(sleepMilliSeconds);
} }
socket.Close();
} }
} }

View File

@ -92,7 +92,7 @@ public class UDPServer
{ {
Console.WriteLine(e.ToString()); Console.WriteLine(e.ToString());
throw new ArgumentException( throw new ArgumentException(
$"Not currect port num: {port}", $"Failed to set up server with this port: {port}",
nameof(port) nameof(port)
); );
} }
@ -143,7 +143,7 @@ public class UDPServer
} }
else else
{ {
return Optional.Some((UDPData)data); return Optional.Some((UDPData)data.DeepClone());
} }
} }
@ -196,7 +196,7 @@ public class UDPServer
} }
else else
{ {
return Optional.Some((UDPData)data); return Optional.Some((UDPData)data.DeepClone());
} }
} }