Android端与Java服务端交互——SocketIO

本文介绍了如何在Android客户端与Java服务端之间使用SocketIO进行通信。服务端基于netty-socketio实现,Android客户端则使用socket.io-client-java库。详细展示了服务端的pom.xml配置和客户端的Socket连接、监听、发送与接收数据的代码示例。

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

直接开始进入正题:

  • 先来服务端程序爽一把,话不多说,先上代码:
public class ServerSocketIOForAndroid {

    public static void main(String[] args) {
        /
         * 创建Socket,并设置监听端口
         */
        Configuration config = new Configuration();
//      config.setHostname("192.168.3.225");
        //设置主机名
        config.setHostname("localhost");
        //设置监听端口
        config.setPort(9092);
        /*config.setUpgradeTimeout(10000000);
        config.setPingTimeout(10000000);
        config.setPingInterval(10000000);*/
        final SocketIOServer server = new SocketIOServer(config);

        /
         * 添加连接监听事件,监听是否与客户端连接到服务器
         */
        server.addConnectListener(new ConnectListener() {
            @Override
            public void onConnect(SocketIOClient client) {
                // 判断是否有客户端连接
                if (client != null) {
                    System.out.println("链接成功。。。");
                } else {
                    System.err.println("并没有人链接上。。。");
                }
                System.err.println(client.getSessionId().toString());
            }
        });

        /
         * 添加监听事件,监听客户端的事件
         * 1.第一个参数eventName需要与客户端的事件要一致
         * 2.第二个参数eventClase是传输的数据类型
         * 3.第三个参数listener是用于接收客户端传的数据,数据类型需要与eventClass一致
         */
        server.addEventListener("login", String.class, new DataListener<String>() {
            @Override
            public void onData(SocketIOClient client, String data,
                    AckRequest ackSender) throws Exception {
                // TODO Auto-generated method stub
                System.err.println("接收到客户端的信息为:" + data);
                //向客户端发送消息
                List<String> list = new ArrayList<String>();
                list.add("haode");
                //第一个参数必须与eventName一致,第二个参数data必须与eventClass一致
                client.sendEvent("login", list.toString());
            }
        });
        //启动服务
        server.start();
    }
}

服务端是基于netty-socketio实现的,需要导入相关的jar包,用maven构建,附上配置文件pom.xml

<dependencies>
  <dependency>
      <groupId>com.corundumstudio.socketio</groupId>
      <artifactId>netty-socketio</artifactId>
      <version>1.7.7</version>
  </dependency>
  <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-simple</artifactId>
      <version>1.7.7</version>
  </dependency>
 </dependencies>

将上述配置参数到工程的pom.xml文件中,即可导入所需要的jar包。 
服务端到此为止~~~

============================================

  • Android客户端,老规矩,先上代码爽爽
 //创建socket连接
    private Socket mSocket;
    {
        try {
            mSocket = IO.socket("http://192.168.3.225:9092/");
        } catch (URISyntaxException e) {
            throw new RuntimeException(e);
        }
    }

客户端是基于socket.io-client-java实现的,具体使用方式其文档中有详细介绍。

上述代码的作用很明显,是创建一个Socket连接,用于客户端和服务器的通讯,IO.socket()里的内容是你服务器端的地址以及监听的端口。

 //连接到Server
    private void socketConn() {
        mSocket.on(Socket.EVENT_CONNECT_ERROR, onConnectError);
        mSocket.on(Socket.EVENT_CONNECT_TIMEOUT, onConnectError);
        mSocket.connect();
    }

这一段代码作用是连接客户端和服务器的,并时刻监听Socket连接是中断。

//取消连接Server
        mSocket.disconnect();
        mSocket.off(Socket.EVENT_CONNECT_ERROR, onConnectError);
        mSocket.off(Socket.EVENT_CONNECT_TIMEOUT, onConnectError);

连接之后,需要在哦你D额story()方法中加入取消Socket连接操作。


上述操作完成后,就可以“随意”的向服务端发送数据和接收服务端返回的数据了。

发送数据也很方便,只要简单的几句就OK了。

//设置数据
mSocket.emit("login", list);
//连接服务
mSocket.on("login", onLogin);

onLogin是一个对象。

private Emitter.Listener onLogin = new Emitter.Listener() {
        @Override
        public void call(Object... args) {
            String s = (String) args[0];
            if (!"".equals(s) || s != null) {
                Log.e("server data : ", s);
                Message msg = new Message();
                msg.what = 0;
                handler.sendMessage(msg);
            }
        }
    };

在call()方法中可以做一些需要的操作,例如利用handler更新UI等。

最后莫要忘了,在onDestory()方法中off掉on过的连接。

mSocket.off("login", onLogin);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值