socket IO java的使用

本文介绍了一个使用 Java 实现的 SocketIO 客户端测试示例,该示例通过 Maven 引入 socket.io-client 依赖,并演示了如何连接到指定的 WebSocket 服务器、发送和接收 JSON 对象。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

             因为项目中有用到socket io 然后呢,老大只给了js版本的,但是需要在服务端也要用到,所以,就写了以下的测试代码.

maven需要导入的

<dependencies>
  <dependency>
    <groupId>io.socket</groupId>
    <artifactId>socket.io-client</artifactId>
    <version>0.8.3</version>
  </dependency>
</dependencies>

测试的Demo代码:


package io.mycat.bigmem.buffer;

import org.json.JSONObject;

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

public class testSocket {
	public static void main(String[] args)  {
		System.out.println(111);
		Socket socket ;
		try {
			
			socket = new Socket("ws://host/?user_id=xs01&user_name=xs01");
			//socket = new Socket("ws://localhost");
//			socket.on(Socket.EVENT_OPEN, new Emitter.Listener() {
//			  @Override
//			  public void call(Object... args) {
//			    //socket.send("hi");
//			    socket.close();
//			  }
//			});
			socket.open();
			
			//socket.connect();
			
			// Receiving an object
			socket.on("broadcast event", new Emitter.Listener() {
			  @Override
			  public void call(Object... args) {
			    JSONObject obj = (JSONObject)args[0];
			    System.out.println(obj.toString());
			  }
			});
			
			JSONObject obj = new JSONObject();
			obj.put("uuid", "123");
			socket.emit("join info", obj);
			
			
			// Sending an object
			
			
			while(true) {
				System.out.println("===");
				obj = new JSONObject();
				obj.put("user_id", "xs01");
				obj.put("user_name", "xs01");
				obj.put("score", "100");

				socket.emit("broadcast event", obj);
				Thread.currentThread().sleep(1000);
				socket.close();
			}
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}

参考的网站:

https://github.com/socketio/socket.io-client-java


### Java使用 Socket.IO 进行网络通信 #### 创建服务器端应用 为了创建一个基于 JavaSocket.IO 服务器,可以从引入依赖项开始。如果采用 Maven 构建工具,则应在项目的 `pom.xml` 文件内加入如下依赖声明: ```xml <dependency> <groupId>com.github.nkzawa</groupId> <artifactId>socket.io-client</artifactId> <version>1.0.0</version> </dependency> <dependency> <groupId>com.github.nkzawa</groupId> <artifactId>engine.io-server</artifactId> <version>1.0.0</version> </dependency> ``` 接着定义并配置一个新的 Socket.IO 服务器实例[^1]。 ```java import io.socket.server.IO; import io.socket.server.Socket; public class ChatServer { public static void main(String[] args) throws Exception { IO.Options opts = new IO.Options(); opts.setPort(8080); final io.socket.server.Server server = IO.listen(opts); server.on(io.socket.server.Server.EVENT_CONNECT, (Socket client) -> { System.out.println("New connection received."); // 处理来自客户端的消息事件 client.on("chat message", data -> { String msg = (String)data[0]; System.out.println("Message from client: " + msg); // 向所有已连接的客户广播消息 synchronized(server.getAll()) { for(Socket sock : server.getAll()){ sock.emit("chat message", msg); } } }); // 断开连接处理逻辑 client.on(io.socket.server.Server.EVENT_DISCONNECT, () -> { System.out.println("Client disconnected"); }); }); System.out.println("Chat server started on port 8080..."); } } ``` 这段程序展示了怎样设置监听特定端口的服务,并响应新用户的接入请求以及接收聊天信息后的转发操作。 #### 开发客户端应用程序 对于希望与上述服务器交互的应用来说,在客户端也需要集成相应的库来支持 Socket.IO 协议。这里给出一段简单的 Android 或者其他纯 Java 应用作为例子: 同样先添加必要的依赖到构建文件中(如果是 Gradle),例如: ```gradle implementation 'io.socket:socket.io-client:2.0.1' ``` 之后编写用于建立远程链接并向其发送数据包的功能模块[^5]: ```java import io.socket.client.IO; import io.socket.client.Socket; import org.json.JSONException; import org.json.JSONObject; // ... try { URL url = new URL("http://localhost:8080/"); Socket mSocket = IO.socket(url.toURI()); mSocket.connect(); JSONObject obj = new JSONObject(); try { obj.put("username", "John Doe"); obj.put("message", "Hello world!"); } catch (JSONException e) {} mSocket.emit("chat message", obj); } catch (MalformedURLException | URISyntaxException e) {} ``` 此片段说明了如何初始化一个指向指定主机名和端口号的目标地址对象,随后尝试发起连接;一旦成功则可调用 emit 方法向目标节点传递自定义结构体形式的信息内容。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值