方法一,使用cmd netstat -n查看当前端口运行情况
public string Execute(string command)
{
System.Diagnostics.Process p = new System.Diagnostics.Process();
p.StartInfo.FileName = "cmd.exe";
p.StartInfo.UseShellExecute = false; //是否使用操作系统shell启动
p.StartInfo.RedirectStandardInput = true;//接受来自调用程序的输入信息
p.StartInfo.RedirectStandardOutput = true;//由调用程序获取输出信息
p.StartInfo.RedirectStandardError = true;//重定向标准错误输出
p.StartInfo.CreateNoWindow = true;//不显示程序窗口
p.Start();
//向cmd窗口发送输入信息 + "&exit"
p.StandardInput.WriteLine(command + "&exit");
p.StandardInput.AutoFlush = true;
//p.StandardInput.WriteLine("exit");
//获取cmd窗口的输出信息
string output = p.StandardOutput.ReadToEnd();
Console.WriteLine(output);
p.WaitForExit();
p.Close();
return output;
}
//判断执行结果是否包含服务端连接即可
string results = Execute("netstat -n");
if (results.Contains("172.168.52.222:8999"))
{
Console.WriteLine("---results true ---");
}
else
{
Console.WriteLine("---results false ---");
}
方法二,使用客户端程序再向服务端临时创建一个连接,用连接结果判断连接情况,记得关闭临时创建的连接
方法三,使用DotNetty框架,再ChannelHandlerAdapter接口的ExceptionCaught方法和HandlerRemoved方法监听实时的连接情况
public class TcpServerHandler : ChannelHandlerAdapter
{
/// <summary>
/// 捕获 异常,并输出到控制台后断开链接,提示:客户端意外断开链接,也会触发
/// </summary>
public override void ExceptionCaught(IChannelHandlerContext context, Exception exception)
{
Log.WriteLog($"客户端{context}下线.");
context.CloseAsync();
}
/// <summary>
/// 客户端下线断线时
/// </summary>
public override void HandlerRemoved(IChannelHandlerContext context)
{
Log.WriteLog($"客户端{context}下线.");
base.HandlerRemoved(context);
}
}