[英]Java Socket IO doesn't send to Node.js, but can connect and receive
我正在使用這個Java 庫在 Node.js 和使用 socket.io 的 Java 應用程序之間進行通信。
這是我的 Java 實現:
socket = IO.socket("http://localhost:3000");
socket.on(Socket.EVENT_CONNECT, new Emitter.Listener() {
@Override
public void call(Object... args) {
System.out.println("Connected!");
}
}).on("error", new Emitter.Listener() {
@Override
public void call(Object... args) {
System.out.println("error");
}
});
socket.connect();
這是我的 Node.js 實現:
const localsocket = require('socket.io')();
localsocket.on('connection', () => {
console.log('Connected!');
localsocket.emit('error', {messsage: "error!~!"})
});
localsocket.on('poke', (msg) => {
console.log("poked");
});
localsocket.listen(3000);
console.log("listening on port 3000");
如您所見,一旦 Java 代碼連接,Javascript 就會廣播 Java 代碼接收到的error
。
Java 代碼輸出:
Connected!
error
Node.js 代碼輸出:
Listening on port 3000
Connected!
現在,我在 Java 代碼中還有一個按鈕,它執行以下操作:
if (socket.connected()) {
System.out.println("do poke");
socket.emit("poke", new JSONObject("{ \"message\" : \"hello\" }"));
}
當我按下這個按鈕時,消息do poke
出現在 Java 控制台中,但沒有消息出現在 Node.js 終端中。
完整的Java代碼:
private Socket socket;
@FXML private ToggleButton button;
public Main(String com) { // constructor
try {
socket = IO.socket("http://localhost:3000");
socket.on(Socket.EVENT_CONNECT, new Emitter.Listener() {
@Override
public void call(Object... args) {
System.out.println("connected woo!");
}
}).on("error", new Emitter.Listener() {
@Override
public void call(Object... args) {
System.out.println("error");
}
});
socket.connect();
} catch (URISyntaxException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@FXML
public void buttonToggle() {
if (button.isSelected()) {
if (socket.connected()) {
System.out.println("do poke");
socket.emit("poke", new JSONObject("{ \"message\" : \"hello\" }"));
}
}
}
所以,我設法找到了一種方法,以防其他人遇到同樣的問題。
我只需要稍微重做我的 Javascript 代碼並為服務器定義一個框架
const app = require('express')();
const server = app.listen(3000);
const io_local = require('socket.io')(server);
io_local.on('connection', (socket) => {
console.log('New connection!');
socket.on('poke', () => {
console.log("poked");
});
socket.on('error', () => {
console.log("error");
});
socket.emit('error', {message: "error"});
});
Java 方面也是一樣。 一切都按預期工作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.