Форум программистов, компьютерный форум, киберфорум
Python: Сети
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
1 / 1 / 0
Регистрация: 31.03.2021
Сообщений: 137

Отправка сообщения от сервера к клиенту

14.06.2022, 12:38. Показов 1031. Ответов 4

Студворк — интернет-сервис помощи студентам
Мне нужно как-то отправить сообщение сервера клиенту, а у клиента это сообщение пронимать и обрабатывать для дальнейшего использования. Я понял как отправить от клиента серверу, и обратно, но я хочу чтобы сервер не отвечал на запрос клиента, а сам отправлял сообщения. Как это можно сделать? Использую WebSocketSharp на C# в качестве клиента и websockets на python в качестве сервера.
Сервер:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
import websockets
import asyncio
 
PORT = 8080
 
print("Server listening on Port "+ str(PORT))
 
async def echo(websocket, path):
    print("A client just connected")
    try:
        async for message in websocket:
            # print("Received message from client: " + message)
            await websocket.send(message)
    except websockets.exceptions.ConnectionClosed:
        print("A client just disconnected")
        
start_server = websockets.serve(echo, "localhost", PORT)
 
asyncio.get_event_loop().run_until_complete(start_server)
asyncio.get_event_loop().run_forever()
Клиент:
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
35
36
37
38
39
40
41
42
43
44
45
using System;
using UnityEngine;
using WebSocketSharp;
 
public class test : MonoBehaviour
{
    WebSocket ws;
    public GameObject target;
    private Vector3 targetPoint;
    private Quaternion targetRotation;
 
    private void Start()
    {
        ws = new WebSocket("ws://127.0.0.1:8080");
        ws.Connect();
        ws.OnMessage += (sender, e) =>
        {
            Debug.Log("Message recived from " + ((WebSocket)sender).Url + ", Data: " + e.Data);
        };
        ws.OnOpen += (sender, e) =>
        {
            Debug.Log("Confirm connected");
        };
        ws.OnClose += (sender, e) =>
        {
            Debug.Log("Connection close");
        };
        ws.OnError += (sender, e) =>
        {
            Debug.Log("Error!");
        };
    }
    void Update()
    {
        if (ws == null)
            return;
 
        if (Input.GetKeyDown(KeyCode.Space))
            ws.Send("Hello!");
        // как принять сообщение от сервера??????
        // targetPoint = new Vector3(target.transform.position.x, transform.position.y, target.transform.position.z) - transform.position;
        // targetRotation = Quaternion.LookRotation(targetPoint, Vector3.up);
        // transform.rotation = targetRotation;
    }
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
14.06.2022, 12:38
Ответы с готовыми решениями:

Отправка сообщения Сервера к Клиенту
Собственно вот программы Сервер: procedure TForm1.ServerSocket1ClientRead(Sender: TObject; Socket: TCustomWinSocket); ...

Отправка сообщения от сервера к клиенту
Есть сервер на С++ на сокетах и клиент на питоне. Как посылать от клиента к серверу и получение ответа проблем нет, а вот как отправить...

Отправка сообщения от сервера к клиенту
как отправить сообщение от сервера к клиенту при нажатий на кнопку? пробывал так. но ругает на AContext.Connection.Writeln('Hello Man'); ...

4
Эксперт по компьютерным сетям
 Аватар для Jabbson
5907 / 3359 / 1036
Регистрация: 03.11.2009
Сообщений: 10,008
14.06.2022, 15:58
Какая у этого идея? Что вы хотите сделать? Не как, а именно что.
0
1 / 1 / 0
Регистрация: 31.03.2021
Сообщений: 137
14.06.2022, 17:11  [ТС]
Jabbson, Будут внешний контроллер управления машинкой, где контроллер будет клиентом отправителем, unity со скриптами клиентом получателем, а сервер передатчиком. Суть я уже понял более менее, для примера сделал генерацию рандомного цвета после запроса клиента отправителя и отправка этого цвета в виде строки клиенту получателю. Но в данном случае это штука будет работать правильно с двумя клиентами, т.к сервер отправляет всем клиентам кроме отправителя, пока меня это устраивает, но можно как то отправлять конкретному клиенту?
Отправитель
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
using System;
using UnityEngine;
using WebSocketSharp;
 
public class Client2 : MonoBehaviour
{
    WebSocket ws;
 
    private void Start()
    {
        ws = new WebSocket("ws://127.0.0.1:8080");
        ws.Connect();
        ws.OnMessage += (sender, e) =>
        {
            Debug.Log("Message recived from " + ((WebSocket)sender).Url + ", Data: " + e.Data);
        };
    }
    void Update()
    {
        if (ws == null)
            return;
 
        if (Input.GetKeyDown(KeyCode.X))
            ws.Send("I Client2!");
    }
}
Получатель
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
35
36
37
38
39
40
41
42
43
44
45
46
using System;
using UnityEngine;
using WebSocketSharp;
 
public class Client1 : MonoBehaviour
{
    WebSocket ws;
    private Renderer objectRenderer;
    private Color matColor;
    private string reciveData;
 
    private void Start()
    {
        objectRenderer = GetComponent<Renderer>();
 
        ws = new WebSocket("ws://127.0.0.1:8080");
        ws.Connect();
        ws.OnMessage += (sender, e) =>
        {
            reciveData = e.Data;
        };
    }
    void Update()
    {
        if (ws == null)
            return;
 
        if (Input.GetKeyDown(KeyCode.Space))
        {
            ChangeColor(reciveData);
            objectRenderer.material.color = matColor;
        }
    }
 
    public void ChangeColor(string data)
    {
        string[] colors = data.Split(',');
        matColor = new Color()
        {
            r = float.Parse(colors[0]) / 255.0f,
            g = float.Parse(colors[1]) / 255.0f,
            b = float.Parse(colors[2]) / 255.0f,
            a = float.Parse(colors[3]) / 255.0f
        };
    }
}
Сервер:
Python
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
import websockets
import asyncio
import random
 
PORT = 8080
 
connected = set()
 
print("Server listening on Port "+ str(PORT))
 
async def echo(websocket, path):
    print("A client just connected")
    connected.add(websocket)
    try:
        async for message in websocket:
            print("Received message from client: " + message)
            for conn in connected:
                if conn != websocket:
                    await conn.send((
                        str(random.randint(0, 255)) + ","+
                        str(random.randint(0, 255)) + ","+
                        str(random.randint(0, 255)) + ","+
                        str(random.randint(0, 255))))
    except websockets.exceptions.ConnectionClosed:
        print("A client just disconnected")
        
start_server = websockets.serve(echo, "localhost", PORT)
 
asyncio.get_event_loop().run_until_complete(start_server)
asyncio.get_event_loop().run_forever()
0
Эксперт по компьютерным сетям
 Аватар для Jabbson
5907 / 3359 / 1036
Регистрация: 03.11.2009
Сообщений: 10,008
14.06.2022, 18:54
То есть грубо говоря сервер - это  websocket proxy?
0
1 / 1 / 0
Регистрация: 31.03.2021
Сообщений: 137
14.06.2022, 20:05  [ТС]
Jabbson, возможно, не знаю, 2 дня назад начал во всем этом разбираться
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
14.06.2022, 20:05
Помогаю со студенческими работами здесь

Отправка сообщения от сервера клиенту на консоль
Ребят, подскажите пожалуйста, в момент удачной записи данных в файл (на стороне сервера выполняется запись в файл), нужно клиенту от...

Отправка сообщения от сервера клиенту при выполнении определенного условия в таймере
Не могу разобраться. Есть две формы. На первой клиент и метка, на второй сервер, image и таймер. В таймере происходит плавное перемещение...

QTcpServer - отправка сообщения нужному клиенту, или сообщение клиенту о подключении "его" устройства
Добрый день. Опять я. Опять проблема :). Вот теперь возникла другая беда: в моей системе предполагается авторизация устройства. С...

Передача сообщения с сервера клиенту
Здравствуйте! Я только начинающий программист, пишу програмку для интернет клуба. И вот у меня два вопроса: 1) Подскажыте как можно на...

Serversocket отправка сообщения определенному клиенту
Нужно с помощью компонентов clientsocket и serversocket отправить сообщение определенному клиенту не по IP, т.к. на одном ип могут висеть...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru