【问题标题】:sending data to node.js/socket.io server from JAVA从 JAVA 向 node.js/socket.io 服务器发送数据
【发布时间】:2013-01-03 23:28:45
【问题描述】:

我正在尝试通过 Java 向我的 node.js/socket.io 服务器发送消息

这是我用来发送消息的代码

import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;

class socketMessage {

    public socketMessage() {
    }

    public static void send(String string) throws Exception {
        System.out.println("Sending message to Socket Server!");

        URL url = new URL("http://<mysite>:8000");
        HttpURLConnection conn = (HttpURLConnection) url.openConnection();
        conn.setRequestMethod("POST");
        conn.setDoOutput(true);
        try (OutputStreamWriter writer = new OutputStreamWriter(conn.getOutputStream())) {
            System.out.println("Data Sent!");
            writer.write(string);
            writer.flush();
        }
        conn.getResponseCode(); // Thanks to BGR
    }
}

调用:socketMessage.send("Admin|notification|Logged in elsewhere\n&gt; Official Java App");

这是服务器代码:

var http = require("http");
var io = require('socket.io');

var sessionsConnections = {};
var whereIsUserVisitingFrom = {};

console.log("\n\n-------------------------------- Server Started --------------------------------");

var server = http.createServer(function(req, res){ 
    var body = '';
    req.on('data', function(data){
        console.log('Received Data');
        body += data;
    });
    req.on('end', function() {
        // Emit the data to all clients
        ioServer.emit('message', { message: body });
    });
});
server.listen(8000);

var ioServer = io.listen(server, { log: false });

ioServer.on('connection', function(socket) {

    var currentUser;

    var parts;

    socket.on('started', function(data) {
        currentUser = data.username;
        sessionsConnections[currentUser] = socket.id;
        whereIsUserVisitingFrom[currentUser] = data.from;
        socket.emit("connected", { message: "Welcome, " + currentUser + "!" });

        socket.broadcast.emit("updateUsers", { message: sessionsConnections, from: whereIsUserVisitingFrom });
        socket.emit("updateUsers", { message: sessionsConnections, from: whereIsUserVisitingFrom });
    });

    socket.on('message', function(data) {
        var parts = data.message.split("|");

        socket.broadcast.emit("updateUsers", { message: sessionsConnections, from: whereIsUserVisitingFrom });
        socket.emit("updateUsers", { message: sessionsConnections, from: whereIsUserVisitingFrom });

        console.log("Message Recieved!");

        if( parts[0] == "*" ) {
            socket.broadcast.emit("display", { message: data.message });
        }else{
            if( parts[0] in sessionsConnections ) {
                io.sockets.socket(sessionsConnections[parts[0]]).emit("display", { message: data.message });
            }else{
                socket.emit("display", { message: "That user is not online!" });
            }
        }
    });

    socket.on('disconnect', function() {
        delete sessionsConnections[currentUser];
        socket.broadcast.emit("updateUsers", { message: sessionsConnections, from: whereIsUserVisitingFrom });
        socket.emit("updateUsers", { message: sessionsConnections, from: whereIsUserVisitingFrom });
    });

});

基本上我的服务器当前所做的是当我访问我的网站时,然后从我的管理中心以“{user}|{action (ie notification)}|{text/extra_param(s)}”的形式发送命令它会向您设置为 {user} 的客户端发送一条消息,然后我在客户端有代码将该消息分成几部分并相应地更改网站 UI,但我也想从我的 Java 应用程序中执行此操作,它不工作:(

任何想法

文尼

提前致谢

【问题讨论】:

  • 你能定义“不工作”吗?错误?暂停? ...??
  • 服务器只是没有接收数据,我的服务器每次接收数据时都会写入控制台,我不知道如何检查错误或超时,我猜他们会显示在 Netbeans 输出控制台中的 java 客户端上,如果是这样,则不会显示错误/超时

标签: javascript java node.js socket.io


【解决方案1】:

要完成 HTTP 连接,必须读取 HTTP 响应。

try 块之后插入conn.getResponseCode()

【讨论】:

  • 我添加了这个,但是我的节点服务器没有收到消息:/
  • @MRVDOG conn.getResponseCode()的值是多少?
  • conn.getResponseCode() 返回“200”
  • @MRVDOG 您的服务器确实收到了连接并回复了。运行调试器服务器端,您的客户端看起来不错或没有发送任何内容
  • 好的,我会的,我现在有工作,所以我回家试试,谢谢你的帮助。我会告诉你进展如何
【解决方案2】:

添加后

conn.getResponseCode()

仍然无法完成这项工作。 最后我找到了socket.io-java-client 正是我们需要的。因为socket.io没有使用你使用的原始websocket,而是在上面添加了一个protocl,你的代码“数据”事件永远不会触发。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-31
    • 2021-03-20
    • 1970-01-01
    • 2013-05-10
    • 2013-10-17
    • 2018-11-19
    相关资源
    最近更新 更多