Не могу понять как работает NetworkStream - C#

Узнай цену своей работы

Формулировка задачи:

Всем Привет! Есть код из Албахари:
static void Main()
    {
        new Thread(Server).Start();// Запустить метод сервера параллельно.
        Thread.Sleep(500);// Предоставить серверу время для запуска.        
        Client();
        }
static void Client()
    {
        using (TcpClient client = new TcpClient("localhost", 51111))
        using (NetworkStream n = client.GetStream())
        {
            BinaryWriter w = new BinaryWriter(n);
            w.Write("Hello");
            w.Flush();          
            Console.WriteLine(new BinaryReader(n).ReadString());  // 1
        }
    }
    static void Server() // Обрабатывает одиночный клиентский запрос и завершается
    {
        TcpListener listener = new TcpListener(IPAddress.Any, 51111);
        listener.Start();       
        using (TcpClient c = listener.AcceptTcpClient())
        using (NetworkStream n = c.GetStream())
        {
            string msg = new BinaryReader(n).ReadString();
            BinaryWriter w = new BinaryWriter(n);
            w.Write(msg + " right back!");
            w.Flush(); // Должен быть вызван метод Flush, поскольку                 
        }                     // мы не освобождаем средство записи, 
        listener.Stop();
    }
        // Hello right back!
Мне не совсем понятно как работает NetworkStream. В коде я пометил строчку номером 1. Почему код в ней не вызывается сразу как инфа записана в поток NetworkStream и нам не выводится Hello? Как BinaryReader в этой строчке понимает что поток предназначен не ему а ТСПлистенеру? Каккая скрытая механика содержится в NetworkStream?

Решение задачи: «Не могу понять как работает NetworkStream»

textual
Листинг программы
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Net;
using System.Net.Sockets;
using System.Threading;
 
class TcpDemo {
    static void Main() {
        new Thread(Server).Start();
        Thread.Sleep(500);
        Client();
 
        Console.ReadLine();
    }
    static void Client() {
        using (TcpClient client = new TcpClient("localhost", 51111)) {
            using (NetworkStream n = client.GetStream()) {
                BinaryWriter w = new BinaryWriter(n);
                w.Write("Hello");
                w.Flush();
                Console.WriteLine(new BinaryReader(n).ReadString());
            }
        }
    }
    static void Server() {
        TcpListener listener = new TcpListener(IPAddress.Any, 51111);
        listener.Start();
        using (TcpClient client = listener.AcceptTcpClient()) {
            using (NetworkStream n = client.GetStream()) {
                string msg = new BinaryReader(n).ReadString();
                BinaryWriter w = new BinaryWriter(n);
                w.Write(msg + " right back!");
                w.Flush();
            }
        }
        listener.Stop();
    }
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

15   голосов , оценка 4.067 из 5
Похожие ответы