2

Socketio を使い始めたところ、問題が発生しました。フラスコ セッションに簡単なメッセージを送信できません。私のJavaコード:

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;

import org.json.JSONException;
import org.json.JSONObject;

import java.net.URISyntaxException;

import io.socket.client.IO;
import io.socket.client.Socket;

public class MainActivity extends AppCompatActivity {

    Socket socket;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        try {
            socket = IO.socket("http://192.168.8.101:8080/send");
        } catch (URISyntaxException e) {

        }

    }

    public void TestButton(View v){
        Log.d("send","before send");
        JSONObject obj = new JSONObject();
        try {
            obj.put("message", "hi");
            obj.put("binary", new byte[42]);
            socket.emit("mes", obj);
        } catch (JSONException e) {
            e.printStackTrace();
        }

    }
}

私のPythonコード:

from flask import Flask
from flask_socketio import SocketIO

app = Flask(__name__)
socketio = SocketIO(app)


@socketio.on("mes", namespace="/send")
def chat_message(message):
    print("message:")


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

エラー:

TypeError: a bytes-like object is required, not 'str' <Greenlet at 0x24118773178: _handle_and_close_when_done(<bound method WSGIServer.handle of <WSGIServer at , <bound method StreamServer.do_close of <WSGIServer, (<gevent._socket3.socket [closed]  object, fd=-1, )> failed with TypeError

誰かがこの問題で私を助けてくれることを願っています。どこでも検索しましたが、答えが見つかりません。

4

1 に答える 1

1

gevent および gevent-websocket プラグインで python3 を使用していると思います。gevent-websocket はまだ python3 をサポートしていません。

ここにオプションが必要です:

  1. gevent と gevent-websocket をアンインストールし、eventlet を使用します。
  2. 236 行目のコード geventwebsocket/handler.py を修正します。

    if b'101' not in self.status:
    

お役に立てれば幸いです。

于 2016-08-05T05:58:50.810 に答える