Всем привет. Сильно огромное вступление делать не буду, поэтому давайте сразу к теме. Целью нашего проекта будет простая отправка сообщения с клиента на сервер и последующим выводом этого сообщения на экране сервера. Ну что ж, поехали! КЛИЕНТ Для начала создадим консольный проект в нашей IDE (Я использую visual studio 2017). Думаю как это сделать вам не стоит рассказывать. Дальше нам нужно создать объект класса Socket, этот класс как раз и предоставляет все средства для сетевого взаимодействия в c#. Для его использования нам нужно будет подключить пространство [System.Net.Sockets]. Чтобы закончить создание объекта, нам нужно использовать один из его конструкторов. В этом примере мы будем работать с протоколом TCP, поэтому заполняем по следующим образом: Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); Код Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); Для каждого протокола свои вариации параметров. Вот ещё пример для UDP: Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); Код Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); Я не буду подробно объяснять что такое AddressFamily, SocketType и т.д. Если вам очень интересно, то можете без проблем найти это в гугле. Итак, мы создали сокет. Дальше нам нужен какой-то массив байтов (буфер). Напрашивается вопрос: "Зачем, чёрт возьми, он нам нужен?". Весь прикол вот, что в сетевом взаимодействии обмен информацией происходит в байтах. То есть в нашем случае нам нужно преобразовать строку в некую последовательность байтов и отправить её на сервер. Так чего же мы ждём? Для начала создадим буфер, затем запросим у пользователя ввод строки, преобразуем её в байты и запишем в наш буфер: Дальше нам нужно будет отправить наше сообщение. Для того чтобы это сделать, нам нужно подключиться к нашему серверу с помощью метода connect(). У него есть одна простая перегрузка, которая позволит сразу ввести в параметрах ip и порт нашего сервера. Т.к. я буду подключаться к себе, то ip будет 127.0.0.1, а порт 666 (Привет id Software!!! ^-^). Затем мы просто с помощью метода send() передаём в параметры наш буфер и отправляем байты на сервер, а так же закрываем подключение (Мы же только один раз отправляем сообщение). СЕРВЕР Переходим к серверу, нам же нужно принимать наше коварное сообщение, ведь так? Для начала нам нужно сокет, но мы парни продвинутые и знаем как создавать его! (Да?). Дальше нужно привязать наш сервер к определённому ip. Делается это через метод Bind(). Заметьте, мы не можем напрямую вписать IP и порт, нам создать объект класса IPEndPoint, который относится к пространству имён System.Net и в его конструкторе вписать IPAddress.Any (Позволяет использовать любой доступный IP на нашем компьютере) и порт, который мы указывали при создании клиента. После, с помощью метода Listen(), ставим ограничение на максимальное кол-во входящих подключений, которое может обработать сервер. Тут будет число, подключений, которые могут быть поставлены в очередь сокета. Ну и нам нужно получать запросы от клиентов. Это делается через метод Accept(). Дальше, самое интересное, нам нужно принимать информацию от клиента. Делаем это через метод Recive(), но как вы заметили/подумали, то нам нужно куда-то записывать эту информацию. Т.к. это поток байтов, то нам вновь нужен буфер, создадим его. Ну и наконец декодируем наше сообщение и выводим его на экран сервера. Результат Запускаем сначала сервер, затем клиент. Как видите всё работает. Знаю, что тут можно улучшить всё исключениями, добавить сообщения о заходе, красиво оформить, но этот код был написал в ознакомительных целях и я старался сделать его максимально коротким. Спасибо за внимание. Код из урока (ТЫК)