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