Не могу понять как работает 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();
- }
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д