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

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

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

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

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

textual
Листинг программы
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
 
namespace ChatAppTCP
{
    //структура пакета
    //------------------------------
    //Описание ->      |DataIdentifier|name length|message length|name        |message        |
    //Размер в байтах->|    4         |     4     |      4       | name lenght| message length|
    public enum DataIdentifier
    {
        Message,
        LogIn,
        LogOut,
        Null
    }
    public class Packet
    {
        #region Поля
        private DataIdentifier dataidentifier;
        private string name;
        private string message;
        #endregion
 
        #region Свойства
        public DataIdentifier ChatDataIdentifier
        {
            get { return dataidentifier; }
            set { dataidentifier = value; }
        }
 
        public string ChatName
        {
            get { return name; }
            set { name = value; }
        }
         public string ChatMessage
        {
            get { return message; }
            set { message = value; }
        }
        #endregion
 
        #region Методы
 
        // Конструктор по умолчанию
        public Packet()
        {
            this.dataidentifier = DataIdentifier.Null;
            this.message = null;
            this.name = null;
        }
 
        public Packet(byte[] dataStream)
        {
            //Чтение идентификатора данных от начала потока(4 байта)
            this.dataidentifier = (DataIdentifier)BitConverter.ToInt32(dataStream, 0);
 
            //Чтение длины имени(4 байта)
            int nameLenght = BitConverter.ToInt32(dataStream, 4);
 
            //чтение длины сообщения(4 байта)
            int messageLenght = BitConverter.ToInt32(dataStream, 8);
 
            //чтение имени
            if (nameLenght > 0)
                this.name = Encoding.UTF8.GetString(dataStream, 12, nameLenght);
            else
                this.message = null;
 
            //чтение сообщения
            if (messageLenght > 0)
                this.message = Encoding.UTF8.GetString(dataStream, 12 + nameLenght, messageLenght);
            else
                this.message = null;
        }
 
        //Конвертирование пакета в массив байтов для отправки/ получения
        public byte[] GetDataStream()
        {
            List<byte> dataStream = new List<byte>();
 
            //Добавление dataIdentifier
            dataStream.AddRange(BitConverter.GetBytes((int)this.dataidentifier));
 
            //Добавление длины имени
            if (this.name != null)
                dataStream.AddRange(BitConverter.GetBytes(this.name.Length));
            else
                dataStream.AddRange(BitConverter.GetBytes(0));
 
            //Добавление имени
            if (this.name != null)
                dataStream.AddRange(Encoding.UTF8.GetBytes(this.name));
 
            //Добавление сообщения
            if (this.message != null)
                dataStream.AddRange(Encoding.UTF8.GetBytes(this.message));
 
            return dataStream.ToArray();
        }
        #endregion
 
    }
}

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


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

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

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