python - socketio.send() 不向客户端发送数据

我正在尝试使用 socketIO 将数据从服务器发送到 flutter 应用程序。虽然我能够连接和发射,但服务器无法将数据发送到客户端。

服务器端代码:

import cv2
import numpy as np

from flask import Flask, render_template
from flask_socketio import SocketIO, emit
from threading import Lock,Timer as tmr
from engineio.payload import Payload
import base64 
import io


app = Flask(__name__)
app.config['SECRET_KEY'] = 'secret!'
socketio = SocketIO(app)
someList = ['apple', 'peas', 'juice','orange']
i=0

@socketio.on('connect')
def connect():
    print("a client connected")

@socketio.on('disconnect')
def disconnect():
    print('Client disconnected')

@socketio.on('msg')
def handlemsg(msg):
    print (msg)
    socketio.send("msg from server")
                

    
@app.route('/')
def hello():
    return "hii"

if __name__ == '__main__':
    socketio.run(app,host= '0.0.0.0')

客户端 (flutter)

@override
  void initState() {
    super.initState();


    IO.Socket socket = IO.io('http://x.x.x.x:5000', <String, dynamic>{
    'transports': ['websocket', 'polling']});

    socket.connect();


    socket.emit('msg', 'test');
    socket.onConnect((_) {
      print('connect');
      socket.emit('msg', 'testing');
    });
    
    socket.onDisconnect((_) => print('disconnect'));
    socket.on('*', (data) => print(data)); //nothing is printed

}

我在服务器端得到的结果:

一个客户端连接

测试

但是,我在客户端没有得到任何数据。我哪里错了?请帮忙

回答1

我不能用 flutter 测试它,但我用 python-socketio 用客户端创建测试它

主要问题可能是 send() 发送名称为 "message" 的消息,例如 emit("message", ...),但您的 on("msg", ...) 需要名称为 "msg" 的消息,而不是 "message"

所以你应该在 Python 中使用 emit("msg", ...),在 flutter 中使用 on("msg", ...)

或者你应该在 Python 中使用 send(),在 flutter 中使用 on("message", ...)

其他问题可能是发送和接收消息可能需要一些时间 - 连接后可能需要额外时间,断开连接前可能需要额外时间 - 至少在我的示例中,我必须睡觉才能获得结果。

完整的工作代码。

我添加了更多具有不同名称的 emit()

服务器.py

from flask import Flask
from flask_socketio import SocketIO, emit


app = Flask(__name__)
app.config['SECRET_KEY'] = 'secret!'

socketio = SocketIO(app)

@socketio.on('connect')
def connect():
    print("client connected")

@socketio.on('disconnect')
def disconnect():
    print('client disconnected')

@socketio.on('question')
def handle_questio(msg):
    print('question msg:', msg)
    socketio.emit("answer", "msg from server")

@socketio.on('help')
def handle_help(msg):
    print('help msg:', msg)
    socketio.emit("support", "help from server")
    
@app.route('/')
def hello():
    return "hii"

if __name__ == '__main__':
    print('start')
    socketio.run(app, host='0.0.0.0')

客户端.py

import socketio

sio = socketio.Client()

@sio.on('connect')
def connect():
    print('connected')

@sio.on('disconnect')
def disconnect():
    print('disconnected')

@sio.on('answer')
def answer(data):
    print('answer:', data)

@sio.on('support')
def support(data):
    print('support:', data)
    
# --- main ---

print('start')
sio.connect('http://localhost:5000')

print('sleep')
sio.sleep(1)

print('emit question')
sio.emit('question', {'foo': 'bar'})

print('emit help')
sio.emit('help', 'can you help me')

print('sleep')
sio.sleep(1)

sio.disconnect()

相似文章

随机推荐

最新文章