Не могу понять как работает NetworkStream - C#
Формулировка задачи:
Всем Привет!
Есть код из Албахари:
Мне не совсем понятно как работает NetworkStream. В коде я пометил строчку номером 1. Почему код в ней не вызывается сразу как инфа записана в поток NetworkStream и нам не выводится Hello? Как BinaryReader в этой строчке понимает что поток предназначен не ему а ТСПлистенеру? Каккая скрытая механика содержится в NetworkStream?
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»
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(); } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д