es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Por qué el servidor Python socket-io funciona con JavaScript pero no con Android Studio?

Actualmente estoy ejecutando un servidor Python Flask-SocketIO que se conecta perfectamente a mi cliente de JavaScript. Estoy utilizando la aplicación de chat de ejemplo de socketio android para escribir el código de Android, pero el servidor Python no se conectará.

¿Cómo puedo conectarme al servidor Ptyhon Flask-SocketIO con Android?

Código de Android:

public class MainActivity extends AppCompatActivity {

private Socket mSocket;
{
    try {
        mSocket = IO.socket("http://127.0.0.1:420");
    } catch (URISyntaxException e) {
        System.out.println(e);
    }
}


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    mSocket.connect();

    String mUsername = "FatCat";
    String message = "Hallo";
    mSocket.emit("new_message", "{\"username\": \"" + mUsername + "\", \"message\":\""+ message +"\"}");
}

@Override
public void onDestroy() {
    super.onDestroy();

    mSocket.disconnect();
}

Código de JavaScript:

<script src="https://cdnjs.cloudflare.com/ajax/libs/socket.io/4.0.1/socket.io.js" integrity="sha512-q/dWJ3kcmjBLU4Qc47E4A9kTB4m3wuTY7vkFJDTZKjTs8jhyGQnaUrxa0Ytd0ssMZhbNua9hE+E7Qv1j+DyZwA==" crossorigin="anonymous"></script>

<script type="text/javascript" charset="utf-8">
    var socket = io("http://127.0.0.1:420");
    socket.on('connect', function() {
    socket.emit('new_message', {username: "FatCat", message:"gg"});
    });
</script>

Código de Python:

app = Flask(<strong>name</strong>)
app.config["SECRET_KEY"] = "key"
socketio = SocketIO(app)

@app.route("/")
def index():
    return render_template("x.html")

@socketio.event
def connect():
    print("connected")

@socketio.event
def new_message(data):
    print({"username": data["username"], "message": data["message"]})
    socketio.emit("new_message", {"username": data["username"], "message": data["message"]})

@socketio.on("new_message")
def new_message(data):
    print("on")
    print({"username": data["username"], "message": data["message"]})
    socketio.emit("new_message", {"username": data["username"], "message": data["message"]})

@socketio.event
def disconnect():
    print("disconnected")

if <strong>name</strong> == "<strong>main</strong>":
    socketio.run(app, port=420,debug=True)

No hay ningún error, pero no envía nada al servidor.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    El código de Android intenta conectarse al servidor utilizando la dirección “http://127.0.0.1:420”, que es la dirección de bucle de retorno para la máquina local. Esta dirección solo funcionará si el dispositivo Android también está ejecutando el servidor Flask-SocketIO en el puerto 420.

    Para conectarse al servidor desde la aplicación de Android, se debe usar la dirección utilizada por el servidor en lugar de la dirección de bucle de retorno. El código del servidor muestra que el servidor SocketIO se está ejecutando en el puerto 420, por lo que el código de Android debería usar la dirección IP de la máquina que ejecuta el servidor en lugar de la dirección de bucle de retorno.

    Por ejemplo, si la dirección IP de la máquina es 192.168.1.100, el código de Android debería conectarse a “http://192.168.1.100:420” en lugar de “http://127.0.0.1:420”.

    También es importante asegurarse de que el dispositivo Android tenga conectividad de red con el servidor y de que se configuren correctamente cualquier firewall o restricción de red para permitir la conexión.

Comments are closed.