Веб-сайты не получают данные

#java #python #websocket

Вопрос:

Для школьного проекта я должен заставить raspberry pi отправлять данные датчиков в java-приложение с помощью websockets. На raspberry pi работает сервер websocket и клиентский скрипт. Оба этих сценария написаны на python. Мне удалось заставить сервер и клиент java и python работать. Проблема, с которой я сталкиваюсь, заключается в том, что при отправке данных он будет получать только свои собственные данные. Поэтому, когда скрипт python отправляет данные на сервер, сервер печатает данные и отправляет их обратно клиенту python, а клиент python печатает их. Когда клиент java отправляет данные на сервер, сервер печатает данные и отправляет их обратно в приложение java, а приложение java печатает их, но скрипт python не печатает данные. Что я делаю не так?

Server.py

 import asyncio
import websockets

async def echo(websocket, path):
    async for message in websocket:
        print(message)
        await websocket.send(message)

start_server = websockets.serve(echo, "localhost", 8765)
asyncio.get_event_loop().run_until_complete(start_server)
asyncio.get_event_loop().run_forever()
 

Client.py

 import asyncio
import websockets
from time import sleep
from datetime import datetime

async def hello():
    uri = "ws://localhost:8765"
    async with websockets.connect(uri) as websocket:
        
        await websocket.send(datetime.now().strftime("%H:%M:%S"))
        while (True):
            # Dit ontvangt een bericht van de server en print het 
            msg = await websocket.recv()
            print(msg)

asyncio.get_event_loop().run_until_complete(hello())
 

ExampleClient.java

 import java.net.URI;
import java.net.URISyntaxException;
import java.util.Map;
import org.java_websocket.client.WebSocketClient;
import org.java_websocket.drafts.Draft;
import org.java_websocket.handshake.ServerHandshake;

import static java.lang.Thread.sleep;

/**
 * This example demonstrates how to create a websocket connection to a server. Only the most
 * important callbacks are overloaded.
 */
public class ExampleClient extends WebSocketClient {

  public ExampleClient(URI serverUri, Draft draft) {
    super(serverUri, draft);
  }

  public ExampleClient(URI serverURI) {
    super(serverURI);
  }

  public ExampleClient(URI serverUri, Map<String, String> httpHeaders) {
    super(serverUri, httpHeaders);
  }

  @Override
  public void onOpen(ServerHandshake handshakedata) {
        send("Hello, it is me. Mario :)");
  }

  @Override
  public void onMessage(String message) {
    System.out.println("received: "   message);
  }

  @Override
  public void onClose(int code, String reason, boolean remote) {
    // The codecodes are documented in class org.java_websocket.framing.CloseFrame
    System.out.println(
        "Connection closed by "   (remote ? "remote peer" : "us")   " Code: "   code   " Reason: "
              reason);
  }

  @Override
  public void onError(Exception ex) {
    ex.printStackTrace();
    // if the error is fatal then onClose will be called additionally
  }
}

public class Main {
    public static void main(String[] args) throws URISyntaxException {
        ExampleClient c = new ExampleClient(new URI(
                "ws://localhost:8765")); // more about drafts here: http://github.com/TooTallNate/Java-WebSocket/wiki/Drafts
        c.connect();
    }
}

 

(Для тестирования все сценарии запускаются на одном компьютере)

Комментарии:

1. Вы должны вести список всех подключенных клиентов и отправлять сообщения всем им.

2. Когда вы говорите «но скрипт python не печатает данные», вы говорите о клиенте python или сервере python?