Я использую следующий код для получения массива байт:
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)
Как вариант можно использовать класс 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#.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Столкнулся со следующей проблемойУ метанита видел, как устанавливать куки, сделал следующим образом: