Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
1 / 1 / 0
Регистрация: 03.02.2013
Сообщений: 109

Наставления в разработке клиент сервера

10.04.2019, 21:21. Показов 568. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день. Пишу небольшой сервер - клиент для локальной сети, функционал планирую добавлять по необходимости. Выкладываю код в надежде что более опытные кодеры подскажут как оптимизировать код или просто найдут крупные косяки, так же интересует реализация протоколов.... как лучше организовать передачу или просто общение между к-с. Есть 2 мысли организации протокола. 1 - отсылать пакеты и на другой стороне их парсить через конструкцию трэй - кэч (допустим 10 десериализаций, где десериализовал без ошибок то и обрабатываем дальше) и 2 мысль по этому поводу - в начале пакета добавлять идентификаторы команд и тупо парсить их на содержание тех или иных слов.

LBS.zip
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
10.04.2019, 21:21
Ответы с готовыми решениями:

Клиент для UDP сервера!
Есть вот такой сервер: using System; using System.Collections.Generic; using System.Linq; using System.Net; using...

Решение для клиент-сервера
Как это реализовать?) Сервер: Принимает текст от множества клиентов, считывает его первое слово(login\register\cd), после чего...

Нужен пример клиент-сервера
Нужно сделать Сервер-Клиент, что он должен делать? 1)когда заходишь в клиент(вин форм) к серверу идет запрос и отправляет mac адресс...

5
548 / 355 / 120
Регистрация: 17.08.2014
Сообщений: 1,351
10.04.2019, 22:22
deadmask, сделайте интерфейс и от него наследуйте классы передачи данных. далее десериализуйте этот интерфейс и проверяйте полученный тип если тип вам известен приводите к этому типу, если не известен значит вам послали не то что вы ожидаете.
0
1 / 1 / 0
Регистрация: 03.02.2013
Сообщений: 109
11.04.2019, 08:23  [ТС]
это первый вариант про который я подумал, только без интерфейса, а просто через десериализацию класса или структуры... и создать кучу классав / структур на каждый случай жизни... для передачи управляющих команд, файлов инфы о железе и тд... я в правильном направлении двигаюсь?
0
548 / 355 / 120
Регистрация: 17.08.2014
Сообщений: 1,351
11.04.2019, 09:23
deadmask, Интерфейс или абстрактный класс нужен для того чтобы вы могли его 100% десерилизовать как базовый. Если в этот момент произойдет ошибка значит у вас мусор а не то что вы ожидаете. Наследование делать нужно обязательно. Далее проверяете тип объекта и сверяете со своим. таким образом вы сможете понять что же вам пришло. сообщение или запрос о поиске а может вообще нечто иное.
0
1 / 1 / 0
Регистрация: 03.02.2013
Сообщений: 109
11.04.2019, 09:28  [ТС]
спасибо
0
548 / 355 / 120
Регистрация: 17.08.2014
Сообщений: 1,351
11.04.2019, 09:57
Примерно так.

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
  public class Classes
    {
 
        public interface IMessage
        {
        }
 
        [Serializable]
        public struct Msg:IMessage
        {
            public Commands Commands { set; get; }
        }
 
        [Serializable]
        public enum Commands
        {
            register,
            send
        }
 
        public class SrvArgs
        {
            public TcpClient client { set; get; }
        }
 
        [Serializable]
        public class Host:IMessage
        {
            public string Name { get; set; }
            public IPAddress IP { get; set; }
            public string Desc { get; set; }
        }
    }
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
 public class Serializer
    {
        public static string Serialize<T>(T obj)where T:Classes.IMessage
        {
            try
            {
                using (MemoryStream stream = new MemoryStream())
                {
                    new BinaryFormatter().Serialize(stream, obj);             
                    return Convert.ToBase64String(stream.ToArray());
                }
            }
            catch (Exception er) { return er.Message; }
        }
 
 
        public static T Deserialize<T>(string dataFromServer) where T : Classes.IMessage
        {
            byte[] bytes = Convert.FromBase64String(dataFromServer);
 
            MemoryStream stream = new MemoryStream(bytes);
 
            BinaryFormatter bformatter = new BinaryFormatter();
 
            return (T)bformatter.Deserialize(stream);
        }
    }
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
11.04.2019, 09:57
Помогаю со студенческими работами здесь

Поделитесь исходниками клиент сервера
Сабж.. Буду благодарен если кто нибудь выложит в качестве примера исходники нормального рабочего клиент сервера, 2 - 3 уровневые, с...

Socket - реализация клиент-сервера
если честно, никогда не задавался целью, как на .Net реализовать клиент-сервер, но вот приперло, а как сделать, не понимаю вообщем-то ...

Асинхронный клиент-сервер. Рассылка от сервера
Здравствуйте! Пишу клиент - серверное приложения на асинхронных сокетах. Задача состоит в том, чтобы при получении сервером...

Простейшие коды клиент-сервера UDP
Собственно, вопрос избитый уверен. Помогите, плиз, разобраться. Пишу контрольную. Простейшие коды клиент-сервера UDP: Клиент: using...

Локальное соединение клиент сервера Socket
Есть два приложения клиент и сервер, на одном компьютере прекрасно соединяются (на сервере задаю адрес localhost, на клиенте 127.0.0.1). Но...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru