Vert.x 实现TCP长连接,控制台可测试

news/2024/5/17 16:46:04 标签: Vert.x, TCP, 长连接

客户端可以在控制台中向服务端发送消息。

package VertxTCPConsoleTest;

import io.vertx.core.AbstractVerticle;
import io.vertx.core.Vertx;
import io.vertx.core.buffer.Buffer;
import io.vertx.core.net.NetServer;

public class VertxTCPServer extends AbstractVerticle {

    @Override
    public void start() {
        // 创建TCP服务器
        NetServer server = vertx.createNetServer();

        // 处理连接请求
        server.connectHandler(socket -> {
            socket.handler(buffer -> {
                // 在这里应该解析报文,封装为协议对象,并找到响应的处理类,得到处理结果,并响应
                System.out.println("接收到的数据为:" + buffer.toString());

                // 按照协议响应给客户端
                socket.write(Buffer.buffer("Hello Vertx from Server!"));
            });

            // 监听客户端的退出连接
            socket.closeHandler(close -> {
                System.out.println("客户端退出连接");
            });

        });

        // 监听端口
        server.listen(33323, "localhost", res -> {
            if (res.succeeded()) {
                System.out.println("服务器启动成功");
            }
        });
    }

    public static void main(String[] args) {
        Vertx.vertx().deployVerticle(new VertxTCPServer());
    }
}
package VertxTCPConsoleTest;

import com.alibaba.fastjson.JSONObject;
import io.vertx.core.AbstractVerticle;
import io.vertx.core.Vertx;
import io.vertx.core.buffer.Buffer;
import io.vertx.core.net.NetClient;
import io.vertx.core.net.NetSocket;

import java.util.Scanner;

public class VertxTCPClient extends AbstractVerticle {
    private static NetSocket netSocket;

    @Override
    public void start() {
        // 创建一个TCP客户端
        NetClient client = vertx.createNetClient();

        // 连接服务器
        client.connect(33323, "localhost", conn -> {
            if (conn.succeeded()) {
                System.out.println("客户端连接服务端成功");
                netSocket = conn.result();
                // 向服务器写数据
                netSocket.write(Buffer.buffer("Hello Vertx from Client!"));

                // 读取服务器的响应数据
                netSocket.handler(buffer -> {
                    System.out.println("接收到的数据为:" + buffer.toString());
                });
            } else {
                System.out.println("连接服务器异常");
            }
        });
    }

    public static void main(String[] args) {
        Vertx.vertx().deployVerticle(new VertxTCPClient());
        Scanner scanner = new Scanner(System.in);
        while (scanner.hasNext()) {
            String message = scanner.next();
            netSocket.write(Buffer.buffer(message));
        }
    }
}

 


http://www.niftyadmin.cn/n/752337.html

相关文章

1、linux、xshell、Xftp介绍

转载于:https://www.cnblogs.com/yhms/p/11158695.html

2、linux常用命令

转载于:https://www.cnblogs.com/yhms/p/11158941.html

Java类型强转的记录

(1)代码: short e1 21;System.out.println((int)e1);Object e2 e1;System.out.println((int)e2); 运行结果: 21 Exception in thread "main" java.lang.ClassCastException: java.base/java.lang.Short cannot be ca…

3、linux下安装卸载mysql

转载于:https://www.cnblogs.com/yhms/p/11158999.html

Python笔记 之 本地目录远程ftp备份

本例使用os.walk()函数遍历指定本地目录,将本地目录结构复制到指定的远程ftp服务器指定的目录。 示例较简单,没有进行额外的验证处理,对于出错亦无特殊处理。 完整代码 ftptools辅助类 import os,sys,ftplib,mimetypesdefaultsite 192.168…

IDEA在代码中定位错误位置

如果代码很长,或者警告和错误不少,想滚动至红色代码位置比较麻烦,使用快捷键会方便很多。在使用快捷键前注意先进行设置。 在IDEA代码区域右侧有警告或错误的地方,即黄色线段或红色线段处右键,点击Go to high pri…

Oracle笔记 之 数据泵

注意事项 使用 EXPDP 和 IMPDP 时应该注意的事项 : EXP 和 IMP 是客户端工具程序,它们既可以在客户端使用,也可以在服务端使用。 EXPDP 和 IMPDP 是服务端的工具程序,只能在 ORACLE 服务端使用,不能在客户端使用。 IM…

fdisk分区实例

查看磁盘分区详情 直接使用fdisk -l 或者使用fdisk /dev/sda,再使用p命令来查看 Command (m for help): pDisk /dev/sda: 32.2 GB, 32212254720 bytes 255 heads, 63 sectors/track, 3916 cylinders, total 62914560 sectors Units sectors of 1 * 512 512 bytes …