C # - лучший способ протестировать TCP-клиент (с помощью Sockets Helper Class) - PullRequest
0 голосов
/ 15 октября 2010

Любые предложения по тестированию прослушивателя 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 Ответ

1 голос
/ 15 октября 2010

Так что, если я правильно прочитал, реальная цель состоит в том, чтобы контролировать соединение, чтобы увидеть, если оно все еще живо?Мы все знаем, что TCP - протокол с полным состоянием.Это означает, что «розетка» должна оставаться открытой.Таким образом, у вашего клиента будет открытый сокет.TcpClient - это просто хорошая оболочка, которая дает вам возможность читать и записывать в сокет.Со страницы MS API мы можем видеть свойство Active .Как гласит документация, это не обновляется, если удаленный разъединяется ... это слишком плохо и, возможно, проблема у вас.Однако они советуют, что если вы хотите посмотреть розетку, вы увидите, отключится ли пульт.Вы можете сделать это, используя свойство Connected .

Я знаю, что вам не нужен тот уровень контроля, кто хочет просто увидеть TCP Client ?? Так что получайте право на Socket !!! как только у вас есть сокет, вы можете иметь полный контроль и жизнеспособность через соединение.Это должно сделать тебя счастливым !!

...