我是C#和Socket编程的新手,虽然我有多年的其他语言编程经验。
概述:我们的生产服务器在特定TCP端口上接收消息。在系统升级期间,我们的接口团队负责关闭到端口的消息。他们通过他们的界面引擎软件执行此任务。我们的团队无法访问此软件。不幸的是,有时接口团队会告诉我们接口没有关闭,并且在我们开始系统升级后应用程序消息仍然到达。这会导致很大的问题。因此,我们希望开发一种工具来显示特定端口上的侦听和活动TCP连接,并提供关闭相关套接字的功能。我理解如何对我创建的套接字使用Shutdown()和Close()方法,但不知道如何关闭由另一个进程创建的套接字。
“Currports”是一款商业软件,可以满足我们的需求,但我被告知,我们无法在生产环境中安装它。
我的建议只是使用netstat和Powershell来识别端口,然后通知我们的界面团队完成他们的工作。但是,我的老板想要一个更优雅的解决方案。此外,接口团队可能已经离开了当天,如果没有访问接口引擎软件,我们将无法停止接口。
注释/问题:
感谢您的帮助。请不要因为我对C#和网络编程的有限知识而尽我所能。
下面提供的代码显示了返回TCP侦听器和活动连接列表的C#代码。我想获取这些方法的结果,并能够关闭,关闭或终止相关的套接字。是的,我知道我在我脑海中,但这是我老板给我的任务。注意:基于我发布此内容后的其他研究,看起来我唯一的选择可能是杀死与套接字关联的进程。如果是这样,我怎么能通过C#来做到这一点?
namespace TCPLibrary
{
public class TCPWrapper
{
// Return a List of active TCP Listeners
public List<String> ShowActiveTcpListeners()
{
List<String> tcpActiveListen = new List<String>();
IPGlobalProperties properties = IPGlobalProperties.GetIPGlobalProperties();
IPEndPoint[] endPoints = properties.GetActiveTcpListeners();
foreach (IPEndPoint e in endPoints)
{
tcpActiveListen.Add(e.ToString());
}
return tcpActiveListen;
}
// Return a List of active TCP Connections
public List<String> ShowActiveTcpConnections()
{
List<String> tcpActiveConn = new List<String>();
IPGlobalProperties properties = IPGlobalProperties.GetIPGlobalProperties();
TcpConnectionInformation[] connections = properties.GetActiveTcpConnections();
foreach (TcpConnectionInformation c in connections)
{
//tcpActiveConn.Add("Local Endpoint: " + c.LocalEndPoint.ToString() + " Remote Endpoint: " + c.RemoteEndPoint.ToString() + " State: " + c.State);
tcpActiveConn.Add("Local Endpoint: " + c.LocalEndPoint.ToString() + " State: " + c.State);
}
return tcpActiveConn;
}
}
}