向node.js/socket发送数据.io服务器从JAVA

sending data to node.js/socket.io server from JAVA

本文关键字:io 数据 服务器 JAVA node js socket      更新时间:2023-09-26

我正在尝试发送消息到我的node.js/socket。

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

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> 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} |{行动(即通知)}|{文本/extra_param (s)}",它将发送一个消息到客户端你设置为{user},然后我在客户端代码将消息分为部分,并相应地改变了网站界面,但是我也想做这个从我的Java应用程序,它不是工作:(

有什么想法

文尼

Thanks in advance

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

try块之后插入conn.getResponseCode()

add

conn.getResponseCode()

仍然不能使此工作。最后我找到了插座。io-java客户机正是我们需要的。因为插座。我不使用你原来使用的websocket,而是在它上面添加了一个协议,你的代码"data"事件将永远不会触发。