2016-07-08 20 views
2

Ich begann mit Socketio, und ich bekam ein Problem. Ich kann keine einfache Nachricht an meine Sitzung senden. Mein Java-Code:python flask-socketio TypeError: ein Byte-ähnliches Objekt wird benötigt, nicht 'str'

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(); 
     } 

    } 
} 

Mein Python-Code:

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) 

Der Fehler:

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 

Ich hoffe, dass jemand in der Lage ist, mir mit diesem Problem zu helfen. Ich habe überall gesucht und ich kann meine Antwort nicht finden.

+0

Wenn Sie einen Python-Fehler posten, fügen Sie bitte den vollständigen Stack-Trace hinzu, da dieser zusätzliche Informationen und Kontext für den Fehler bietet. – Miguel

Antwort

1

Ich denke, Sie verwenden Python3 mit dem Gevent und Gevent-Websocket-Plugin. gevent-websocket unterstützt python3 noch nicht.

Sie müssen Möglichkeiten:

  1. Deinstallieren GEVENT und GEVENT-websocket und eventlet verwenden.
  2. Befestigen Sie den Code geventwebsocket/handler.py in Zeile 236.

    if b'101' not in self.status: 
    

Ich hoffe, dass ich Ihnen helfen könnte.