2016-07-08 1 views
2

Я начал использовать Socketio, и у меня возникла проблема. Я не могу отправить простое сообщение на мой сеанс фляшки. Мой код Java:python flask-socketio TypeError: необходим байтовый объект, а не '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(); 
     } 

    } 
} 

Мой 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 

Я надеюсь, что кто-то может помочь мне с этой проблемой. Я искал везде, и я не могу найти свой ответ.

+0

Когда вы публикуете ошибку Python, включите полную трассировку стека, так как это предоставляет дополнительную информацию и контекст для ошибки. – Miguel

ответ

1

Я думаю, вы используете python3 с gevent и gevent-websocket плагином. gevent-websocket пока не поддерживает python3.

Вы должны варианты здесь:

  1. Uninstall GEvent и GEvent-WebSocket и использовать eventlet.
  2. исправить код geventwebsocket/handler.py в строке 236.

    if b'101' not in self.status: 
    

Я надеюсь, что я мог бы помочь вам.

Смежные вопросы