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

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

14.06.2022, 12:38. Показов 1082. Ответов 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
Ответ Создать тему
Новые блоги и статьи
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
Использование значений реквизитов справочника в документе, с определенными условиями и правами
Maks 07.04.2026
1. Контроль срока действия договора Алгоритм из решения ниже реализован на примере нетипового документа "ЗаявкаНаРаботу", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если. . .
Доступность команды формы по условию
Maks 07.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: сделать доступной кнопку (команда формы "ЗавершитьСписание") при. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru