Загрузка...

Создаём простенькое клиент-сервер приложение

Тема в разделе C# создана пользователем SijyKijy 20 авг 2018. 314 просмотров

Загрузка...
  1. SijyKijy
    SijyKijy Автор темы 20 авг 2018 Сгнил 34 10 мар 2017
    Всем привет. Сильно огромное вступление делать не буду, поэтому давайте сразу к теме.

    Целью нашего проекта будет простая отправка сообщения с клиента на сервер и последующим выводом этого сообщения на экране сервера. Ну что ж, поехали!

    КЛИЕНТ

    Для начала создадим консольный проект в нашей IDE (Я использую visual studio 2017). Думаю как это сделать вам не стоит рассказывать.
    Дальше нам нужно создать объект класса Socket, этот класс как раз и предоставляет все средства для сетевого взаимодействия в c#. Для его использования нам нужно будет подключить пространство [System.Net.Sockets].

    [IMG]
    Чтобы закончить создание объекта, нам нужно использовать один из его конструкторов. В этом примере мы будем работать с протоколом TCP, поэтому заполняем по следующим образом:
    Код
    Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
    Для каждого протокола свои вариации параметров. Вот ещё пример для UDP:
    Код
    Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
    Я не буду подробно объяснять что такое AddressFamily, SocketType и т.д. Если вам очень интересно, то можете без проблем найти это в гугле.
    Итак, мы создали сокет. Дальше нам нужен какой-то массив байтов (буфер). Напрашивается вопрос: "Зачем, чёрт возьми, он нам нужен?". Весь прикол вот, что в сетевом взаимодействии обмен информацией происходит в байтах. То есть в нашем случае нам нужно преобразовать строку в некую последовательность байтов и отправить её на сервер. Так чего же мы ждём?
    Для начала создадим буфер, затем запросим у пользователя ввод строки, преобразуем её в байты и запишем в наш буфер:

    [IMG]
    Дальше нам нужно будет отправить наше сообщение. Для того чтобы это сделать, нам нужно подключиться к нашему серверу с помощью метода connect(). У него есть одна простая перегрузка, которая позволит сразу ввести в параметрах ip и порт нашего сервера. Т.к. я буду подключаться к себе, то ip будет 127.0.0.1, а порт 666 (Привет id Software!!! ^-^). Затем мы просто с помощью метода send() передаём в параметры наш буфер и отправляем байты на сервер, а так же закрываем подключение (Мы же только один раз отправляем сообщение).
    [IMG]

    СЕРВЕР

    Переходим к серверу, нам же нужно принимать наше коварное сообщение, ведь так? Для начала нам нужно сокет, но мы парни продвинутые и знаем как создавать его! (Да?).

    Дальше нужно привязать наш сервер к определённому ip. Делается это через метод Bind(). Заметьте, мы не можем напрямую вписать IP и порт, нам создать объект класса IPEndPoint, который относится к пространству имён System.Net и в его конструкторе вписать IPAddress.Any (Позволяет использовать любой доступный IP на нашем компьютере) и порт, который мы указывали при создании клиента.
    После, с помощью метода Listen(), ставим ограничение на максимальное кол-во входящих подключений, которое может обработать сервер. Тут будет число, подключений, которые могут быть поставлены в очередь сокета. Ну и нам нужно получать запросы от клиентов. Это делается через метод Accept().
    [IMG]
    Дальше, самое интересное, нам нужно принимать информацию от клиента. Делаем это через метод Recive(), но как вы заметили/подумали, то нам нужно куда-то записывать эту информацию. Т.к. это поток байтов, то нам вновь нужен буфер, создадим его.

    [IMG]
    Ну и наконец декодируем наше сообщение и выводим его на экран сервера.

    [IMG]

    Запускаем сначала сервер, затем клиент.

    [IMG]
    [IMG]
    Как видите всё работает. Знаю, что тут можно улучшить всё исключениями, добавить сообщения о заходе, красиво оформить, но этот код был написал в ознакомительных целях и я старался сделать его максимально коротким.
    Спасибо за внимание.

    Код из урока (ТЫК)
     
  2. San32_inactive330533
    San32_inactive330533 20 авг 2018 Заблокирован(а) 1 9 мар 2018
    Респект автору. Очень информативная статья. Лучшее, что я прочитал за последнее время
     
  3. B4rt
    B4rt 20 авг 2018 вечный студент 527 9 сен 2017
    Гуд братик
     
  4. Lenzy
    Lenzy 20 авг 2018 АШ Пятерочка : t.me/merky_robot 117 8 мар 2018
    че за хуйня
     
  5. SijyKijy
    SijyKijy Автор темы 21 авг 2018 Сгнил 34 10 мар 2017
    Lenzy, В теме написано же
     
  6. fantik22
    Респект, но как по мне сервер лучше писать на php/python
     
  7. Nol1k
    Nol1k 21 авг 2018 Проверенный 226 4 янв 2017
    Пиши лучше на библиотеках Qt, там такой же Socket, просто легче.
     
Top