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