C# - 测试TCP客户端的最佳方法(使用套接字助手类)

时间:2010-10-15 14:59:28

标签: c# sockets tcpclient

有关测试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();


              }       

          }     

1 个答案:

答案 0 :(得分:1)

因此,如果我正确阅读,真正的目的是监控连接,看它是否还活着?我们都知道TCP是一个状态完整的协议。这意味着“插座”必须保持打开状态。所以你的客户端将有一个打开的套接字。 TcpClient只是一个很好的包装器,它使您能够读取和写入套接字。从MS API page我们可以看到有一个Active属性。如文档所示,如果远程断开连接,则不会更新...这太糟糕了,也许你遇到了问题。但是,他们建议如果您想观看插座,您将看到遥控器是否断开连接。您可以使用Connected属性执行此操作。

我知道你不想成为你想要的控制级别,谁想要只看到TCP客户端? So get right at the Socket!!!一旦你有了套接字,就可以通过连接获得full control and viability。这应该会让你开心!!