@kos_dev

Как написать сервер клиент на C#?

Подскажите, где можно узнать о том как написать свою технологию сервер - клиент, то есть и сервер и сам клиент. С какими протоколами лучше всего взаимодействовать? Что и приблизительно как использовать для написания мессенджера для двух или болееудаленных клиентов от сервера?
Заранее спасибо.
  • Вопрос задан
  • 1257 просмотров
Решения вопроса 1
VoidVolker
@VoidVolker Куратор тега C#
Dark side eye. А у нас печеньки! А у вас?
  1. Спроектировать архитектуру системы и каждого приложения в отдельности;
  2. Сделать декомпозицию архитектуры;
  3. Спроектировать протокол обмена данными или взять готовый в виде библиотеки;
  4. Реализовать все.


Сервер работает следующим образом (примерно, детали зависят от особенностей архитектуры и прочее):
  1. Слушает определенный порт и ждет подключения к порту;
  2. После подключения клиента к порту передает соединение в очередь к пулу процессов-воркеров (по числу процессорных ядер);
  3. Воркер обрабатыват соединение, проводит необходимые проверки, логин клиента и т.п.;
  4. После обработки соединение попадает в список подключенных процессов и обрабатывается ядром сервера.


Клиент работает примерно так:
  1. Ищет сервер;
  2. Подключается к порту;
  3. Проходит аутентификацию и авторизацию;
  4. Ожидает данные от сервера / передает данные серверу.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 4
Rou1997
@Rou1997
System.Net.Sockets (ваш протокол будет на базе TCP) или библиотеки для WebSocket (ваш протокол будет на базе Websocket, который на базе TCP), библиотеки есть опен-сорсные.

приблизительно как

На первый взгляд просто, но если требуется длительное время держать подключение открытым то понадобится обеспечить keep-alive, а если еще и корректная обработка сбоев интернет-подключения, то еще придется реализовать повторные попытки подключения и чтение данных по частям (в буфер byte[]), для тестирования проблем с интернетом используйте программы вроде NetLimiter и напишите тест - код, который автоматически отключает текущую сеть когда пакет уже начал отправляться, или пока еще не начал.

для двух или болееудаленных клиентов от сервера?

А вот это не так сложно, просто применить многопоточность: создать поток на принятие клиентов, и на работу с каждым клиентом тоже свой поток.
Ответ написан
1) WCF
2) OWIN Self Host

Все уже готово к использованию.
Не надо работать с TCP напрямую, обертки вшиты в .NET.
Ответ написан
Комментировать
habcerga1
@habcerga1
Для меня тоже вопрос интересный который задал kos_dev. Возможно есть какая то книга на подобие паттернов GOF где описаны разные технологии и архитектуры клиетно-серверных приложений?
Ответ написан
Комментировать
@OwDafuq
Пиши в вк: https://vk.com/dev_0x00
Опыта в написании групповых мессенджеров у меня хоть отбавляй:D
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы