Нужна помощь в тестировании TCP-сервера

Недавно я построил сервер для одного из моих проектов. Сервер работает с TCP соединением. (5 устройств одновременно общаются с ним). Для каждого устройства, которое подключается к нему, я затем создаю новую строку сетки с полученной информацией. Моя проблема в том, что если у меня есть клиенты, включенные до запуска сервера, сервер не может справиться с входящим потоком соединений и падает. Мне нужно запустить его несколько раз, прежде чем он, наконец, сработает.

К сожалению, я не могу воспроизвести ошибку у себя дома, чтобы отладить ее. Есть ли какое-нибудь приложение, которое могло бы всегда пытаться подключиться к серверу и, когда ему это наконец удастся, отправить ему строку по сети?


person BusterCZE    schedule 19.09.2020    source источник
comment
Может быть . Или вы могли бы написать один   -  person ADyson    schedule 19.09.2020


Ответы (1)


В конце концов я написал свое приложение для этой цели. Приложение очень примитивное. Он просто пытается повторно подключиться все время, пока он не подключен к серверу, и когда ему это удается, он отправляет строку подключения на сервер и читает ответ.

Вот код, если кто-то захочет его использовать: (для большего количества подключений сразу просто запустите больше экземпляров этого приложения или соответствующим образом измените код)

https://pa ste bin(.)com/g0wcJXh7 (извините, но я просто не смог вставить весь код в кодовый блок - он всегда помещал туда только его часть)

static TcpClient client;
    static string ipAdress = "10.10.2.29";
    static int port = 11800;
    static string cnnMess;
    static string junkMess;
    static Byte[] bytes;
    static Byte[] bytes_junk;
    static void Main(string[] args)
    {
        //initializing variables
        Random r = new Random();
        cnnMess = string.Format("CNN?AA:BB:CC:DD:{0}!", r.Next(10, 99));
        bytes = Encoding.UTF8.GetBytes(cnnMess);
        junkMess = "JUNK!";
        bytes_junk = Encoding.UTF8.GetBytes(junkMess);


        while (true)
        {
            try
            {
                client.GetStream().Write(bytes_junk, 0, bytes_junk.Length); //App tries to send junk packet to the server (used to determine wether the connection still exist)
                Thread.Sleep(50); //Put the thread to sleep to minimize the trafic
            }
            catch //if the sending fails it means that the client is no longer connected --> reconnect
            {
                Connect();
            }
        }
        
        
    }
    static void Connect()
    {
        client = new TcpClient();
        try
        {
            client.Connect(ipAdress, port);
        }
        catch { }
        int count = 0;
        while (!client.Connected)
        {
            Thread.Sleep(500);
            count++;
            if(count >= 5)
            {
                try
                {
                    client.Connect(ipAdress, port);
                }
                catch { }
                count = 0;
                Console.WriteLine("Connection Failed - retrying");
            }
        }
        var writer = new StreamWriter(client.GetStream());
        var reader = new StreamReader(client.GetStream());
        client.GetStream().Write(bytes, 0, bytes.Length);


        Console.WriteLine(cnnMess);
        while (client.GetStream().DataAvailable)
        {
            Console.Write(client.GetStream().ReadByte());
        }
        Console.WriteLine();

        }
person BusterCZE    schedule 19.09.2020