需要帮助测试 TCP 服务器
Need help testing TCP server
我最近为我的一个项目构建了一个服务器。服务器使用 TCP 连接。 (5 个设备同时与其通信)。对于连接到它的每个设备,我然后创建一个新的网格行,其中包含收到的信息。
我的问题是,如果我在服务器启动之前打开客户端,服务器将无法处理传入的连接高峰和崩溃。我需要启动它几次才能最终启动。
不幸的是,我无法在家中重现错误以进行调试。是否有任何应用程序能够始终尝试连接到服务器,并在它最终成功时通过网络向它发送一个字符串?
最后我为此编写了我的应用程序。该应用程序非常原始。它只是在未连接到服务器的所有时间尝试重新连接,当它成功时,它会向服务器发送连接字符串并读取答案。
这里是代码,如果有人想使用它:(一次更多连接只需 运行 这个应用程序的更多实例或适当更改代码)
https://pa ste bin(.)com / g0wcJXh7(很抱歉,我无法将所有代码粘贴到代码块中 - 它总是只放其中的一部分)
static TcpClient client;
static string ipAdress = "10.10.2.29";
static int port = 11800;
static string cnnMess;
static string junkMess;
static Byte[] bytes;
static Byte[] bytes_junk;
static void Main(string[] args)
{
//initializing variables
Random r = new Random();
cnnMess = string.Format("CNN?AA:BB:CC:DD:{0}!", r.Next(10, 99));
bytes = Encoding.UTF8.GetBytes(cnnMess);
junkMess = "JUNK!";
bytes_junk = Encoding.UTF8.GetBytes(junkMess);
while (true)
{
try
{
client.GetStream().Write(bytes_junk, 0, bytes_junk.Length); //App tries to send junk packet to the server (used to determine wether the connection still exist)
Thread.Sleep(50); //Put the thread to sleep to minimize the trafic
}
catch //if the sending fails it means that the client is no longer connected --> reconnect
{
Connect();
}
}
}
static void Connect()
{
client = new TcpClient();
try
{
client.Connect(ipAdress, port);
}
catch { }
int count = 0;
while (!client.Connected)
{
Thread.Sleep(500);
count++;
if(count >= 5)
{
try
{
client.Connect(ipAdress, port);
}
catch { }
count = 0;
Console.WriteLine("Connection Failed - retrying");
}
}
var writer = new StreamWriter(client.GetStream());
var reader = new StreamReader(client.GetStream());
client.GetStream().Write(bytes, 0, bytes.Length);
Console.WriteLine(cnnMess);
while (client.GetStream().DataAvailable)
{
Console.Write(client.GetStream().ReadByte());
}
Console.WriteLine();
}
我最近为我的一个项目构建了一个服务器。服务器使用 TCP 连接。 (5 个设备同时与其通信)。对于连接到它的每个设备,我然后创建一个新的网格行,其中包含收到的信息。 我的问题是,如果我在服务器启动之前打开客户端,服务器将无法处理传入的连接高峰和崩溃。我需要启动它几次才能最终启动。
不幸的是,我无法在家中重现错误以进行调试。是否有任何应用程序能够始终尝试连接到服务器,并在它最终成功时通过网络向它发送一个字符串?
最后我为此编写了我的应用程序。该应用程序非常原始。它只是在未连接到服务器的所有时间尝试重新连接,当它成功时,它会向服务器发送连接字符串并读取答案。
这里是代码,如果有人想使用它:(一次更多连接只需 运行 这个应用程序的更多实例或适当更改代码)
https://pa ste bin(.)com / g0wcJXh7(很抱歉,我无法将所有代码粘贴到代码块中 - 它总是只放其中的一部分)
static TcpClient client;
static string ipAdress = "10.10.2.29";
static int port = 11800;
static string cnnMess;
static string junkMess;
static Byte[] bytes;
static Byte[] bytes_junk;
static void Main(string[] args)
{
//initializing variables
Random r = new Random();
cnnMess = string.Format("CNN?AA:BB:CC:DD:{0}!", r.Next(10, 99));
bytes = Encoding.UTF8.GetBytes(cnnMess);
junkMess = "JUNK!";
bytes_junk = Encoding.UTF8.GetBytes(junkMess);
while (true)
{
try
{
client.GetStream().Write(bytes_junk, 0, bytes_junk.Length); //App tries to send junk packet to the server (used to determine wether the connection still exist)
Thread.Sleep(50); //Put the thread to sleep to minimize the trafic
}
catch //if the sending fails it means that the client is no longer connected --> reconnect
{
Connect();
}
}
}
static void Connect()
{
client = new TcpClient();
try
{
client.Connect(ipAdress, port);
}
catch { }
int count = 0;
while (!client.Connected)
{
Thread.Sleep(500);
count++;
if(count >= 5)
{
try
{
client.Connect(ipAdress, port);
}
catch { }
count = 0;
Console.WriteLine("Connection Failed - retrying");
}
}
var writer = new StreamWriter(client.GetStream());
var reader = new StreamReader(client.GetStream());
client.GetStream().Write(bytes, 0, bytes.Length);
Console.WriteLine(cnnMess);
while (client.GetStream().DataAvailable)
{
Console.Write(client.GetStream().ReadByte());
}
Console.WriteLine();
}