Форум программистов, компьютерный форум, киберфорум
8Observer8
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  

Создание простейшего чата с клиентом на консольном C# и с сервером на Node.js/socket.io/JavaScript. Бонус - WPF-клиент

Запись от 8Observer8 размещена 12.02.2020 в 17:04
Показов 3905 Комментарии 0

Содержание блога

Бонус - клиент на WPF (файл server.js лежит в папке Server). Далее описан консольный проект на C# (клиент) и сервер на Node.js/socket.io/JavaScript.

Создаём пустую папку для сервера. Заходим в папку через консоль. Вводим команды:

npm init -y
npm i socket.io shortid

Создаём файл socket.js и копируем в него код, я написал комментарии к каждой строке:

JavaScript
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
// Подключаем нужные библиотеки
var io = require('socket.io')(process.env.PORT || 1337);
var shortid = require('shortid');
 
// Выводим сообщение, что клиент запущен
console.log('server started');
 
// Это функция вызывается, как только подключается клиент
io.on('connection', function (socket) {
 
    // Генерируем ID для подсоединившегося клиента, т.е. для текущего
    var thisClientId = shortid.generate();
 
    // Выводим ID текущего клиента
    console.log('client connected, broadcasting spawn, id: ', thisClientId);
    
    // Отправляем сообщение всем клиентам
    socket.broadcast.emit(thisClientId + ' is connected');
    
    // Принимаем сообщение и отсылаем остальным клиентам
    socket.on('message', function (data) {
        // Выводим принятое сообщение в консоль
        console.log('from server: ' + data);
        // Пересылаем принятое сообщение остальным клиентам
        socket.broadcast.emit('message', data + '(from id/' + thisClientId + ')');
    });
    
    // Выводим сообщение, что клиент отсоединился
    socket.on('disconnect', function () {
        console.log('client disconnected');
    });
});
Запускаем сервер командой: npm server.js

Создаём консольный проект на C#. Ставим через NuGet: SocketIoClientDotNet. Внимание! Сначала нужно поставить пакет с зависимостями, а потом сам SocketIoClientDotNet. Иначе выдаёт ошибку при установке.

Копируем код в Program.cs:

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
34
using System;
 
namespace ConsoleChatBySocketIoClientDotNet
{
    class Program
    {
        static void Main(string[] args)
        {
            // Создаём сокет
            var socket = Quobject.SocketIoClientDotNet.Client.IO.Socket("http://localhost:1337");
 
            // Принимаем сообщение и выводим на экран
            socket.On("message", (data) =>
            {
                // Переходим на новую строку
                Console.WriteLine();
                // Выводим принятое сообщение на экран
                Console.WriteLine("Ответ: " + data);
                // Выводим приглашение ввести сообщение
                Console.Write("Введите сообщение: ");
            });
 
            while (true)
            {
                // Выводим приглашение ввести сообщение
                Console.Write("Введите сообщение: ");
                // Читаем сообщение из консоли
                string mess = Console.ReadLine();
                // Отправляем сообщение на сервер
                socket.Emit("message", mess);
            }
        }
    }
}
Запускаем проект и чат работает.

Рекомендую развернуть чат на бесплатном хостинге Heroku по официальной инструкции: Getting Started on Heroku with Node.js. Тогда на C#-клиенте нужно изменить адрес с локального на следующий, где указать имя домена, который даётся Heroku во время создания приложения автоматически:

C#
1
var socket = Quobject.SocketIoClientDotNet.Client.IO.Socket("ws://имя-вашего-приложения.herokuapp.com");
Автор пакета написал здесь, что он объявил пакет SocketIoClientDotNet не рекомендуемым к использованию (deprecate), то там же он написал, что будет использовать этот пакет для своих проектов.
Миниатюры
Нажмите на изображение для увеличения
Название: ConsoleChatBySocketIoClientDotNet.png
Просмотров: 1147
Размер:	48.8 Кб
ID:	5911  
Вложения
Тип файла: zip WpfChatBySocketIoClientDotNet.zip (14.6 Кб, 1120 просмотров)
Размещено в Без категории
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Новые блоги и статьи
Часы электронные
Uhbif79 12.08.2026
Выкладываю программу часов. Программа позволяет: 1. Использовать системное время и дату, 2. Есть возможность вводить время и дату вручную. 3. Реализованы 2 будильника: начало и конец рабочего дня. . . .
Часы с будильником на основе класса QLCDNumber
Uhbif79 12.08.2026
Всем добрый день, выкладываю программу часов с будильником на основе класса QLCDNumber. Здесь я пробовал самостоятельно создавал классы, впервые столкнулся с видимостью переменной одного класса из. . .
Установка MinGW GCC 16.2 и CMake
8Observer8 10.08.2026
VK Видео: https:/ / vkvideo. ru/ video-240781534_456239017 YouTube: eY5-5PyI9NM Текстовая версия
Неделя из жизни имитационной модели склада: мои кривые руки растут, откуда надо
anaschu 10.08.2026
Неделя из жизни имитационной модели склада: как я почти написал неправильную логику и что с этим делать Работаю сейчас над учебно-рабочим проектом: строю в AnyLogic имитационную модель процессов. . .
Калькулятор для расчета родства
russiannick 07.08.2026
1. Задача: Создать калькулятор для расчета родства. Родственных связей существует 8 ступеней, такие как: p - отец P - мать q - муж Q - жена b - брат B - сестра s - сын S - дочь
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире. Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
У нас сейчас поговорку "Опять 25" нужно переделать на "Опять +35".
kumehtar 04.08.2026
С ностальгией вспоминаю времена моего детства, когда у нас и правда +25 - была максимальная температура летом. Раньше +25 °C реально казались вершиной жары, когда можно было весь день пропадать на. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru