【发布时间】:2022-07-08 18:12:53
【问题描述】:
我正在尝试使用 socketIO 将数据从服务器发送到颤振应用程序。虽然我能够连接和发射,但服务器无法向客户端发送数据。
服务器端代码:
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')
客户端(颤振)
@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
}
我在服务器端得到的结果:
一个客户端连接
测试
但是,我在客户端没有得到任何数据。我哪里错了?请帮忙
【问题讨论】:
-
在控制台中运行烧瓶时是否收到错误消息?运行 Flutter 时是否收到任何错误消息?
-
在颤振中你定义了
on('event',...,所以在Python中你可能需要emit('event', someList[i])。其他的也一样——你定义了on('fromServer', ...),所以Python必须发送emit('fromServer', ...。最终你我尝试在颤振on('*', ...上运行来自服务器的任何消息的代码。 -
您还应该检查
i,因为经过几次请求后,它可能会比len(someList)更大,并且它可能不会发送数据。也许您应该使用i = (i + 1) % len(someList)来轮换列表(至少对于测试而言)。 -
我无法运行flutter,所以我使用python-socketio创建的客户端测试了flask
-
@furas 我已经删除了 'event' 和 'fromServer' 并且我正在发送一条消息作为对来自服务器端的 'emit' 的响应,但问题仍然存在:((颤振确实没有收到消息)