使用特定端口检查服务器上的状态
Check status on the server with specific port
我需要检查本地网络中所有计算机的状态。但是我的代码无效,因为其中有很长的响应。我试过线程,那个检查器在后台运行。但我需要有一个更快的检查。我的程序作为客户端服务器运行。
在我的主程序中,我需要将可用计算机写入 listbox。
示例:
我的主要客户想要在本地网络中获得可用的计算机。计算机有一个服务器在端口 13000 上运行。但是,当我想找出可用的计算机时,响应太长了。
变量
string message = "!";
string temp = "";
public static string list = "";
Checker 可用计算机:
public static void checker()
{
string IP;
int statResp = 0;
for (int i = 1; i < 10; i++)
{
IP = "192.168.0." + i;
string msg = "!";
try
{
Int32 port = 13000;
TcpClient client = new TcpClient(IP, port);
Byte[] data = System.Text.Encoding.ASCII.GetBytes(msg);
msg = "!";
NetworkStream stream = client.GetStream();
stream.Write(data, 0, data.Length);
data = new Byte[256];
String responseData = String.Empty;
Int32 bytes = stream.Read(data, 0, data.Length);
responseData = System.Text.Encoding.ASCII.GetString(data, 0, bytes);
if (responseData == " " || responseData == "!")
{
statResp = 1; // response is correct server runs
}
stream.Close();
client.Close();
}
catch (ArgumentNullException)
{
continue; // continue with next iteration
}
catch (SocketException)
{
continue; // continue with next iteration
}
if (statResp == 1)
{
list = IP; // list is variable
}
}
}
TIMER - 检查 list 变量
中的数据
private void timer2_Tick(object sender, EventArgs e)
{
if (temp != list)
{
listBox1.Items.Add(list);
temp = list;
}
}
如果 list 变量与 temp 变量具有相同的值,旧地址将不会添加到列表中。
我解决了我的问题。当我将 UDP 广播数据包发送到 UDP 侦听器(客户端)时,发件人的 IP 地址将被传输到向最后一个发件人发送新数据包。原始发件人(服务器)将从远程客户端接收新的 IP 地址。
我需要检查本地网络中所有计算机的状态。但是我的代码无效,因为其中有很长的响应。我试过线程,那个检查器在后台运行。但我需要有一个更快的检查。我的程序作为客户端服务器运行。
在我的主程序中,我需要将可用计算机写入 listbox。 示例:
我的主要客户想要在本地网络中获得可用的计算机。计算机有一个服务器在端口 13000 上运行。但是,当我想找出可用的计算机时,响应太长了。
变量
string message = "!";
string temp = "";
public static string list = "";
Checker 可用计算机:
public static void checker()
{
string IP;
int statResp = 0;
for (int i = 1; i < 10; i++)
{
IP = "192.168.0." + i;
string msg = "!";
try
{
Int32 port = 13000;
TcpClient client = new TcpClient(IP, port);
Byte[] data = System.Text.Encoding.ASCII.GetBytes(msg);
msg = "!";
NetworkStream stream = client.GetStream();
stream.Write(data, 0, data.Length);
data = new Byte[256];
String responseData = String.Empty;
Int32 bytes = stream.Read(data, 0, data.Length);
responseData = System.Text.Encoding.ASCII.GetString(data, 0, bytes);
if (responseData == " " || responseData == "!")
{
statResp = 1; // response is correct server runs
}
stream.Close();
client.Close();
}
catch (ArgumentNullException)
{
continue; // continue with next iteration
}
catch (SocketException)
{
continue; // continue with next iteration
}
if (statResp == 1)
{
list = IP; // list is variable
}
}
}
TIMER - 检查 list 变量
中的数据private void timer2_Tick(object sender, EventArgs e)
{
if (temp != list)
{
listBox1.Items.Add(list);
temp = list;
}
}
如果 list 变量与 temp 变量具有相同的值,旧地址将不会添加到列表中。
我解决了我的问题。当我将 UDP 广播数据包发送到 UDP 侦听器(客户端)时,发件人的 IP 地址将被传输到向最后一个发件人发送新数据包。原始发件人(服务器)将从远程客户端接收新的 IP 地址。