3

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> 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 });
    });

});

基本的に、サーバーが現在行っていることは、Webサイトにアクセスし、管理センターから「{user} | {action(ienotification)} | {text / extra_param(s)}」の形式でコマンドを送信することです。 {user}として設定したクライアントへのメッセージ。クライアント側に、そのメッセージを部分に分割し、それに応じてWebサイトのUIを変更するコードがありますが、Javaアプリからもこれを実行したいと思います。動作していません:(

何か案は

ビニー

前もって感謝します

4

2 に答える 2

1

HTTP 接続を完了するには、HTTP 応答を読み取る必要があります。

ブロックconn.getResponseCode()の後に挿入try

于 2013-03-29T06:26:39.227 に答える
0

追加後

conn.getResponseCode()

まだこれを機能させません。最後に、socket.io-java-clientが必要なものを正確に見つけました。socket.io は、使用する元の websocket を使用せず、protocl を追加するため、コードの「データ」イベントは決してトリガーされません。

于 2017-01-06T07:58:20.557 に答える