【发布时间】:2024-08-20 01:55:01
【问题描述】:
我正在使用this 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 就会广播一个 error,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\" }"));
}
}
}
【问题讨论】: