![](/img/trans.png)
[英]Creating Node.js + socket.io Server/Client with users authentication, sending/receiving data
[英]sending data to node.js/socket.io server from JAVA
我試圖通過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 });
});
});
基本上當我訪問我的網站時,我的服務器當前所做的是什么,然后以“{user} | {action(ie notification)} | {text / extra_param(s)}”的形式從我的管理中心發送命令“它將發送向您設置為{user}的客戶端發送消息,然后我在客戶端將代碼拆分為部分並相應地更改網站UI,但我也希望從我的Java應用程序執行此操作,並且不工作:(
有任何想法嗎
溫尼
提前致謝
要完成HTTP連接,必須讀取HTTP響應。
在try
塊之后插入conn.getResponseCode()
添加后
conn.getResponseCode()
仍然沒有使這項工作。 最后我發現socket.io-java-client正是我們所需要的。因為socket.io不使用你使用的原始websocket但是在它上面添加了一個protocl,你的代碼“data”事件永遠不會被觸發。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.