有关测试TCP客户端侦听器的任何建议。我正在寻找的是实际的网络统计数据,如“有效负载大小”,“超时值”,“从服务器接收的实际有效负载字节”。
public static void tcpConnect() {
int port = 12345;
IPEndPoint ipep = new IPEndPoint(
IPAddress.Parse("xx.xx.xx.xx"), port);
Socket server = new Socket(AddressFamily.InterNetwork,
SocketType.Stream, ProtocolType.Tcp);
IPGlobalProperties _ipGlobalProperties = IPGlobalProperties.GetIPGlobalProperties();
TcpConnectionInformation[] _tcpConnInfoArray = _ipGlobalProperties.GetActiveTcpConnections();
// bool isAvaiable = true;
try
{
server.Connect(ipep);
}
catch (SocketException e)
{
Console.WriteLine("Unable to connect to server");
Console.WriteLine(e.ToString());
return;
}
NetworkStream ns = new NetworkStream(server);
if (ns.CanRead)
{
foreach (TcpConnectionInformation tcpConnInfo in _tcpConnInfoArray)
{
if (tcpConnInfo.LocalEndPoint.Port == port)
{
//isAvaiable = false;
Console.WriteLine("Error: Can't Read from Port");
break;
}
Console.Write("Local endpoint: {0} ", tcpConnInfo.LocalEndPoint.Address);
Console.Write("Remote endpoint: {0} ", tcpConnInfo.RemoteEndPoint.Address);
Console.Write("{0}", tcpConnInfo.State);
}
}
else
{
Console.WriteLine("Error: Can't Read from Socket");
ns.Close();
return;
}
while (true)
{
string input = Console.ReadLine();
if (input == "exit")
break;
if (ns.CanWrite)
{
Console.WriteLine("NS Can write");
ns.Flush();
}
}
Console.WriteLine("Disconnection from server");
ns.Close();
server.Shutdown(SocketShutdown.Both);
server.Close();
}
}
答案 0 :(得分:1)
因此,如果我正确阅读,真正的目的是监控连接,看它是否还活着?我们都知道TCP是一个状态完整的协议。这意味着“插座”必须保持打开状态。所以你的客户端将有一个打开的套接字。 TcpClient只是一个很好的包装器,它使您能够读取和写入套接字。从MS API page我们可以看到有一个Active属性。如文档所示,如果远程断开连接,则不会更新...这太糟糕了,也许你遇到了问题。但是,他们建议如果您想观看插座,您将看到遥控器是否断开连接。您可以使用Connected属性执行此操作。
我知道你不想成为你想要的控制级别,谁想要只看到TCP客户端? So get right at the Socket!!!一旦你有了套接字,就可以通过连接获得full control and viability。这应该会让你开心!!