Передача информации по сокетам - C#

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

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

Здравствуйте. Хочу сделать клиент\сервер'ную программу, которая через сокеты через протокол TCP отправляет файлы. И у меня возникло несколько вопросов. Во первых, это тип сокета. Я видел, что есть сокеты типа Stream (потоковые), Raw (дословно переводя - сырые) и еще несколько типов. На сколько я понял, потоковые сокеты самостоятельно разбивают отправляемые данные на пакеты и могут отправить любое количество информации, да еще при этом не надо морочиться с пакетами? Второй вопрос заключается в следующем : я хочу передать файл в виде "разрешение"|"сам файл", но как это осуществить? Отправить строку, которую методом Split разделить на несколько частей? Или есть какие либо более удобные способы? И если мое предположение по поводу Split верно, то как можно преобразовать FileStream в string? ======================================== Заранее пре-благодарен за помощь!

Решение задачи: «Передача информации по сокетам»

textual
Листинг программы
  1. using System;
  2. using System.IO;
  3. using System.Net;
  4. using System.Net.Sockets;
  5. using System.Text;
  6.  
  7. namespace Server
  8. {
  9.    class Program
  10.    {
  11.       static void Main(string[] args)
  12.       {
  13.          IPHostEntry ipHost = Dns.GetHostEntry("localhost");
  14.          IPAddress ipAddr = ipHost.AddressList[0];
  15.          IPEndPoint ipEndPoint = new IPEndPoint(ipAddr, 11000);
  16.  
  17.          using(Socket sListener = new Socket(ipAddr.AddressFamily, SocketType.Stream, ProtocolType.Tcp))
  18.          {
  19.             try
  20.             {
  21.                sListener.Bind(ipEndPoint);
  22.                sListener.Listen(10);
  23.  
  24.                while(true)
  25.                {
  26.                   Console.WriteLine("Ожидаем соединение через порт {0}", ipEndPoint);
  27.                   using(Socket handler = sListener.Accept())
  28.                   {
  29.                      byte[] buffer = new byte[1024];
  30.                      int count = 0;
  31.                      using(MemoryStream ms = new MemoryStream())
  32.                      {
  33.                         do
  34.                         {
  35.                            count = handler.Receive(buffer);
  36.                            ms.Write(buffer, 0, count);
  37.                         }
  38.                         while(count > 0);
  39.                         ms.Position = 0;
  40.                         int size = ms.ReadByte();
  41.                         byte[] arr = new byte[size];
  42.                         ms.Read(arr, 0, arr.Length);
  43.                         string exp = Encoding.GetEncoding(1251).GetString(arr);
  44.                         DateTime time = DateTime.Now;
  45.                         using(FileStream fs = new FileStream($"Screenshot_{time.ToShortDateString()}_{time.Hour * 3600 + time.Minute * 60 + time.Second}{exp} ", FileMode.Create))
  46.                         {
  47.                            ms.CopyTo(fs);
  48.                            Console.WriteLine($"Сервер сохранил скриншот размером: {ms.Length} байт");
  49.                         }
  50.                      }
  51.                      Console.WriteLine("Сервер завершил соединение с клиентом.");
  52.                      handler.Shutdown(SocketShutdown.Both);
  53.                   }
  54.                }
  55.             }
  56.             catch(Exception ex)
  57.             {
  58.                Console.WriteLine(ex.ToString());
  59.             }
  60.             finally
  61.             {
  62.                Console.ReadLine();
  63.             }
  64.          }
  65.       }
  66.    }
  67. }

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


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

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

6   голосов , оценка 4.333 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы