java - 为什么 java socket.io 发射失败

标签 java android node.js websocket socket.io

我正在使用 Socket.io 和 node.js 服务器创建 Android 应用程序。

我的js服务器:

 var http = require('http');

var server = http.createServer(function(req, res) {
});

var mysql = require('mysql');

var db = mysql.createConnection({
    host:,
    port:,
    user:,
    password:,
    database:
});

var resultconnection = "";

db.connect(function(err){
    if (err) {
    resultconnection = err;
    }
});

var io = require('socket.io').listen(server);

io.on('connection',function(socket){
   console.log('Connected!');

    socket.on("createaccount", function(data){
        console.log('Create account executed.');
        if(resultconnection != ""){
            db.query("INSERT INTO USER (USERNAME, PASSWORD, EMAIL, BIRTHDATE) VALUES('"+data["username"]+"', SHA1('"+data["password"]+"'), '"+data["email"]+"', "+data["birthdate"]+"')");
            resultconnection = "OK";
        }
        socket.emit('response', {"response": resultconnection});
    });


});

server.listen(8080);

Android 客户端(java):

try {
            socket = IO.socket("http://localhost:8080");
            socket.on("response", new Emitter.Listener() {
                @Override
                public void call(Object... args) {
                    JSONObject obj = (JSONObject) args[0];
                    try {
                        result = obj.getString("message");
                    } catch (JSONException e) {
                        e.printStackTrace();
                    }
                }

            });
            socket.connect();
            JSONObject createUser = new JSONObject();
            try {
                createUser.put("username", username);
                createUser.put("password", password);
                createUser.put("email", email);
                createUser.put("birthdate", datanasc);
            } catch (JSONException e) {
                e.printStackTrace();
            }

            socket.emit("createaccount", "");
        } catch (URISyntaxException e) {
            result = e.getMessage();
        }

Console.log("Connected") 正在运行,但是当我运行 socket.emit("createaccount") 时,客户端不会在服务器上运行。

最佳答案

我认为您在客户端代码中提供的服务器 IP 不正确。当您的服务器在其他远程系统上运行时,它正在尝试连接到您的 Android 设备的本地主机。 尝试更改以下代码 fragment 中的服务器 IP(理想情况下这应该是 localhost 以外的其他 IP):

try {
        socket = IO.socket("<server_IP:server_PORT");
        socket.on("response", new Emitter.Listener() {
            @Override
            public void call(Object... args) {
                JSONObject obj = (JSONObject) args[0];
                try {
                    result = obj.getString("message");
                } catch (JSONException e) {
                    e.printStackTrace();
                }
            }

        });
        socket.connect();
        JSONObject createUser = new JSONObject();
        try {
            createUser.put("username", username);
            createUser.put("password", password);
            createUser.put("email", email);
            createUser.put("birthdate", datanasc);
        } catch (JSONException e) {
            e.printStackTrace();
        }

        socket.emit("createaccount", "");
    } catch (URISyntaxException e) {
        result = e.getMessage();
    }

关于java - 为什么 java socket.io 发射失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37633883/

相关文章:

java - 单元测试的依赖注入(inject)与管理自己变量的类

java - 使用文件输入/输出流方法安全存储数据

Node.js SSL Cassandra Apache

java - 文件无法正确上传

java - Java中按位运算符和位移位的有趣行为返回值

java - 用AVL树实现Bentley-Ottmann算法

Android NullPointerException - Spinner onItemSelected `view` 旋转后参数为空

android - 如何在设备在 android 中移动时在谷歌地图上移动标记(当前标记)

node.js - 如何在 Node.js 中进行 MongoDB 聚合

node.js - Node.js 如何决定一条语句是否被异步处理?