C# Networkstream.read ()

Установлен ли Python 3 после установки или не зависит главным образом от аромата и версии. Если пакет будет зависеть от Python 3, то он будет установлен.

лучший признак на том, будет ли это идти со стандартной настольной установкой, путем проверки файлов манифеста на изображения установки.

Файлы манифеста:

Оба ничего не содержат с python3. Однако

делают , имеют много из python3 пакеты.

Это означает, что для 12,04 необходимо будет, вероятно, установить его впоследствии: python3 Install python3. Используйте ссылку, чтобы установить использование Центра программного обеспечения или работать:

sudo apt-get install python3

Затем вызывают новую оболочку Python 3 с помощью [1 119]

python3

Примечание, что Python 2.7 будет все еще присутствовать и останется значение по умолчанию.

9
задан Alfred Myers 9 June 2012 в 13:53
поделиться

2 ответа

Нет, блокировка не выполняется. Операция чтения читает столько данных, сколько доступно, до количества байтов, указанного в параметре размера. Источник: http://msdn.microsoft.com/en-us/library/system.net.sockets.networkstream.read.aspx

Учитывая, что он не будет ждать лишнего 1 байта, если вы ожидаете вы должны реализовать цикл для продолжения чтения потока. Вы можете выйти из цикла, как вам удобнее.


ОБНОВЛЕНИЕ: Я был неправ, когда заявил: «Блокировки нет вообще. Если данные недоступны для чтения, метод Read возвращает 0», но я был прав, когда заявил, что он не будет блокировать ожидание, чтобы заполнить весь буфер. , что соответствует сценарию, описанному в вопросе Kazoom.

Обновлено, чтобы продемонстрировать, что NetworkStream.Read блокирует ожидание первого байта, но не блокирует ожидание, чтобы заполнить весь буфер .

Создать в консольные проекты

На одном конце у вас есть слушатель:


IPEndPoint ep = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 12345);
TcpListener listener = new TcpListener(ep);
listener.Start();
TcpClient client = listener.AcceptTcpClient();
NetworkStream s = client.GetStream();
byte[] buffer = new byte[32];
Console.WriteLine(s.Read(buffer, 0, 32));
Console.WriteLine("Press any key to continue...");
Console.Read();

На другом конце мы отправляем только один байт:


IPEndPoint ep = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 12345);
TcpClient client = new TcpClient();
client.Connect(ep);
client.GetStream().Write(new byte[] { 60 }, 0, 1);
Console.WriteLine("Press any key to continue...");
Console.Read();

Обе стороны будут работать, пока не достигнут Console.Read (). Обратите внимание, что слушатель не блокирует чтение.

Слушатель напечатает «1»

6
ответ дан 4 December 2019 в 21:50
поделиться

Он будет блокироваться до тех пор, пока не получит 32 байта, или пока соединение не будет закрыто. Для обеспечения неблокирующего чтения следует использовать асинхронные методы BeginRead () и EndRead ().

Вот пример кода, наглядно демонстрирующего эффект блокировки.

   Socket one = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
    Socket two = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

    IPEndPoint ep = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 12345);

    one.Bind(ep);
    one.Listen(1);
    two.Connect("127.0.0.1", 12345);
    one = one.Accept();

    NetworkStream s = new NetworkStream(two);
    byte[] buffer = new byte[32];
    s.Read(buffer, 0, 32);

Изменить

Несмотря на то, что этот код производит эффект блокировки, это происходит только из-за реализации NetworkStream абстрактного метода Read () Stream ( который необходимо переопределить). В документации по Stream.Read () указано следующее:

Реализации возвращают количество байты прочитаны. Возвращаемое значение - ноль только если позиция в настоящее время конец потока.

Вот почему кодовые блоки блокируются, когда НЕТ данных не было получено И конец потока не был достигнут. Также говорится:

Реализация будет заблокирована до тех пор, пока хотя бы один байт данных может быть прочтите , в случае отсутствия данных доступный. Чтение возвращает 0 только тогда, когда в потоке больше нет данных и больше ничего не ожидается (например, закрытый сокет или конец файла). An реализация бесплатна, чтобы вернуть меньше байтов, чем запрошено, даже если конец потока не удалось достичь.

2
ответ дан 4 December 2019 в 21:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: