Приложение tcp/ip, прикладной протокол - C#

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

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

Здравствуйте, у меня появилось задание, где нужно разработать прикладной протокол для обмена текстовыми сообщениями на основе протокола TCP. Создать приложение, обеспечивающее передачу текстовых сообщений произвольному адресату в сети и их приём с указанием сетевого адреса отправителя с использованием протокола TCP. Приложение должно иметь возможность работать и как клиент, и как сервер. Также нужно потом в отдельном приложении добавить возможность отправки файлов Посоветуйте материалы, видео либо по сетевому программированию, так как в этой области я тупой,а лабораторную делать нужно. Все просмотренные мной материалы или видео, не то. В одних разделяют на 2 отдельных приложения(Клиент и сервер), в других не разрабатывают протокола.

Решение задачи: «Приложение tcp/ip, прикладной протокол»

textual
Листинг программы
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5.  
  6.  
  7. namespace ChatAppTCP
  8. {
  9.     //структура пакета
  10.     //------------------------------
  11.     //Описание ->      |DataIdentifier|name length|message length|name        |message        |
  12.     //Размер в байтах->|    4         |     4     |      4       | name lenght| message length|
  13.     public enum DataIdentifier
  14.     {
  15.         Message,
  16.         LogIn,
  17.         LogOut,
  18.         Null
  19.     }
  20.     public class Packet
  21.     {
  22.         #region Поля
  23.         private DataIdentifier dataidentifier;
  24.         private string name;
  25.         private string message;
  26.         #endregion
  27.  
  28.         #region Свойства
  29.         public DataIdentifier ChatDataIdentifier
  30.         {
  31.             get { return dataidentifier; }
  32.             set { dataidentifier = value; }
  33.         }
  34.  
  35.         public string ChatName
  36.         {
  37.             get { return name; }
  38.             set { name = value; }
  39.         }
  40.          public string ChatMessage
  41.         {
  42.             get { return message; }
  43.             set { message = value; }
  44.         }
  45.         #endregion
  46.  
  47.         #region Методы
  48.  
  49.         // Конструктор по умолчанию
  50.         public Packet()
  51.         {
  52.             this.dataidentifier = DataIdentifier.Null;
  53.             this.message = null;
  54.             this.name = null;
  55.         }
  56.  
  57.         public Packet(byte[] dataStream)
  58.         {
  59.             //Чтение идентификатора данных от начала потока(4 байта)
  60.             this.dataidentifier = (DataIdentifier)BitConverter.ToInt32(dataStream, 0);
  61.  
  62.             //Чтение длины имени(4 байта)
  63.             int nameLenght = BitConverter.ToInt32(dataStream, 4);
  64.  
  65.             //чтение длины сообщения(4 байта)
  66.             int messageLenght = BitConverter.ToInt32(dataStream, 8);
  67.  
  68.             //чтение имени
  69.             if (nameLenght > 0)
  70.                 this.name = Encoding.UTF8.GetString(dataStream, 12, nameLenght);
  71.             else
  72.                 this.message = null;
  73.  
  74.             //чтение сообщения
  75.             if (messageLenght > 0)
  76.                 this.message = Encoding.UTF8.GetString(dataStream, 12 + nameLenght, messageLenght);
  77.             else
  78.                 this.message = null;
  79.         }
  80.  
  81.         //Конвертирование пакета в массив байтов для отправки/ получения
  82.         public byte[] GetDataStream()
  83.         {
  84.             List<byte> dataStream = new List<byte>();
  85.  
  86.             //Добавление dataIdentifier
  87.             dataStream.AddRange(BitConverter.GetBytes((int)this.dataidentifier));
  88.  
  89.             //Добавление длины имени
  90.             if (this.name != null)
  91.                 dataStream.AddRange(BitConverter.GetBytes(this.name.Length));
  92.             else
  93.                 dataStream.AddRange(BitConverter.GetBytes(0));
  94.  
  95.             //Добавление имени
  96.             if (this.name != null)
  97.                 dataStream.AddRange(Encoding.UTF8.GetBytes(this.name));
  98.  
  99.             //Добавление сообщения
  100.             if (this.message != null)
  101.                 dataStream.AddRange(Encoding.UTF8.GetBytes(this.message));
  102.  
  103.             return dataStream.ToArray();
  104.         }
  105.         #endregion
  106.  
  107.     }
  108. }

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


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

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

13   голосов , оценка 4 из 5

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

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

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