如何将javasocketio连接到javascript服务器

e4eetjau  于 2021-06-30  发布在  Java
关注(0)|答案(1)|浏览(385)

我有一个javascript服务器 server.js ```
const http = require("http").createServer()
const io = require("socket.io")(http)

io.on("connection", socket => {
console.log("a user connected")
})

http.listen(3000, () => {
console.log("listening on *:3000")
})

  1. 和一个java客户端 `SocketIO.java` ```
  2. package chess_client;
  3. import java.net.URISyntaxException;
  4. import io.socket.client.IO;
  5. import io.socket.client.Socket;
  6. import io.socket.emitter.Emitter;
  7. public class SocketIO {
  8. private static Socket socket;
  9. public static void main(String[] args) throws URISyntaxException {
  10. socket = IO.socket("http://localhost:3000");
  11. socket.on(Socket.EVENT_CONNECT, new Emitter.Listener() {
  12. @Override
  13. public void call(Object... args) {
  14. System.out.println("Connected!");
  15. }
  16. });
  17. socket.connect();
  18. }
  19. }

我一直在搜索javascript服务器和java客户机示例,但是https://github.com/socketio/socket.io-client-java 仅显示没有javascript服务器代码的java客户机示例。当两者结合时,什么都不起作用。当我运行这两个代码时,我在两个终端上都看不到任何东西!!!怎么了???
对于给出的任何答案,请注意,我更喜欢使用typescript而不是javascript,但两者都是可以接受的

u59ebvdq

u59ebvdq1#

在javasocketio客户端更新之后,我找到了答案。我犯了一些错误。
我需要你的npm套餐 socket.io 第二版*
文件上说 1.* 对于java客户机,socketio服务器的版本必须是 2.* . 在这个时候, 2.3.0 是最新的npm软件包 socket.io 因此,请安装该版本而不是 3.* .
我假设java客户机来自不同的主机,因为它不是由服务器本身呈现的。例如,这是官方socketio文档中的代码:

  1. app.get('/', (req, res) => {
  2. res.sendFile(__dirname + '/index.html');
  3. });

在本例中,javascript服务器直接呈现html文件,因此javascript服务器无法运行java代码。这就是为什么在创建 const io ,我们应该将其更改为:

  1. const io = require('socket.io')(http, {
  2. cors: { origin: '*' }
  3. })

这允许任何主机或源站的代码访问socketio服务器。
如果有人需要这个参考,下面是一个我工作的java客户机和javascript服务器的例子 app.js :

  1. const http = require('http').createServer()
  2. const io = require('socket.io')(http, {
  3. cors: { origin: '*' }
  4. })
  5. io.on('connection', (socket) => {
  6. console.log('Connected to client!')
  7. io.emit('time', Date.now())
  8. })
  9. http.listen(8080, () => console.log('Server running on port 8080'))
  10. ``` `App.java` :

package socket_test;

import java.net.URISyntaxException;

import io.socket.client.IO;
import io.socket.client.Socket;
import io.socket.emitter.Emitter;

public class App {
public static void main(String[] args) throws URISyntaxException {
Socket socket = IO.socket("http://localhost:8080");
socket.on(Socket.EVENT_CONNECT, new Emitter.Listener() {

  1. @Override
  2. public void call(Object... args) {
  3. System.out.println("Connected to server!");
  4. }
  5. });
  6. socket.on("time", new Emitter.Listener() {
  7. @Override
  8. public void call(Object... args) {
  9. System.out.println("Time: " + args[0]);
  10. }
  11. });
  12. socket.connect();
  13. }

}

展开查看全部

相关问题