Есть ли иной подход получения информации при помощи TCP в C#?

112
12 апреля 2021, 05:30

Я использую следующий код для получения массива байт:

    void Reciever()
    {
        var client = new TcpClient();
        client.Connect(IPAddress.Parse("127.0.0.1"), 1010);
        while (true)
        {
            if (client.Available > 0)
            {                    
                var bytes = new BinaryReader(client.GetStream()).ReadBytes(client.Available);
                Process(bytes);
            }
        }
    }

Есть ли иной способ проверки того, поступила ли новая информация на сокет? (Без постоянной проверки свойства TcpClient.Available)

Answer 1

Как вариант можно использовать класс Socket вместо TcpClient. После connect используйте socket.Receive(data_buffer, _data_length, options). Этот метод ожидает появления данных и считывает появившиеся данные в буфер, переданный первым аргументом.

Ваш код в таком случае преобразуется так:

void Reciever()
    {
        var client_socket = new Socket();
        socket.Connect(IPAddress.Parse("127.0.0.1"), 1010);
        byte[] recieved_data = new byte[256]; // Размер данных примерный
        socket.Receive(data);
    }

Но лучше так:

void Reciever()
        {
            IPEndPoint ipPoint = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 1010);
            Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            socket.Connect(ipPoint);
            byte[] recieved_data = new byte[256]; // Размер данных примерный
            socket.Receive(recieved_data, /*здесь длина данных, если нужно*/, /*здесь доп. опции*/);
        }

На этом ресурсе есть достаточно информации для начального ознакомления с темой сетевого программирования TCP/IP на C#.

READ ALSO
App.Run в ASP.NET Core

App.Run в ASP.NET Core

Столкнулся со следующей проблемойУ метанита видел, как устанавливать куки, сделал следующим образом:

95
migrations add выдаёт ошибку

migrations add выдаёт ошибку

когда делаю migrations выдаёт такую ошибку

113
WPF проблема с CompositeCollection

WPF проблема с CompositeCollection

Доброго времени суток!

130
Некликабельные кнопки в Unity

Некликабельные кнопки в Unity

Появилась проблема с кнопками

121