Vert.x:一个简单的Tcp客户端和服务端demo

2023-11-03

1. 声明

当前内容主要为记录和学习使用Vert.x创建Tcp服务并实现通信的demo,当前内容参考官方文档

2. Server Demo

import io.vertx.core.AbstractVerticle;
import io.vertx.core.Promise;
import io.vertx.core.Vertx;
import io.vertx.core.buffer.impl.BufferImpl;

public class TcpServer extends AbstractVerticle {

	@Override
	public void start(Promise<Void> startPromise) throws Exception {
		vertx.createNetServer().connectHandler(socket -> {
			socket.handler(buffer -> {
				String context = buffer.toString("utf-8");
				System.out.println("server received some bytes: " + buffer.length()+",context :"+context);
				BufferImpl bufferImpl = new BufferImpl();
				bufferImpl.appendBytes("你好世界......".getBytes());
				socket.write(bufferImpl);
			});
			socket.closeHandler(handler->{
				System.out.println("connect close :"+handler);
			});
		}).exceptionHandler(socket->{
			socket.printStackTrace();
		}).listen(8888).onSuccess(handler -> {
			System.out.println("tcp server start up in port 8888 success!");
		});
	}
	
	public static void main(String[] args) {
		Vertx vertx2 = Vertx.vertx();
		vertx2.deployVerticle(new TcpServer());
	}

}

3. Client Demo

import io.vertx.core.AbstractVerticle;
import io.vertx.core.Future;
import io.vertx.core.Promise;
import io.vertx.core.Vertx;
import io.vertx.core.buffer.impl.BufferImpl;
import io.vertx.core.net.NetClient;
import io.vertx.core.net.NetSocket;

public class TcpClient extends AbstractVerticle {

	@Override
	public void start(Promise<Void> startPromise) throws Exception {
		vertx
		.createNetClient()
		.connect(8888, "localhost")
		.onComplete(socket->{
			NetSocket result = socket.result();
			result.handler(buffer->{
				String content = buffer.toString("utf-8");
				System.out.println("client received len:"+buffer.length()+",content:"+content);
			});
			result.closeHandler(handler->{
				System.out.println("socket close....");
			});
		})
		.onSuccess(handler->{
			System.out.println("connect localhost:8888 tcp server success!");
			BufferImpl bufferImpl = new BufferImpl();
			bufferImpl.appendBytes("你好服务器!".getBytes());
			handler.write(bufferImpl);
			
		});
	}
	
	public static void main(String[] args) {
		Vertx vertx2 = Vertx.vertx();
		vertx2.deployVerticle(new TcpClient());
	}
	
}

4. 测试

开启服务器
在这里插入图片描述
开启客户端

在这里插入图片描述
在这里插入图片描述
测试成功

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Vert.x:一个简单的Tcp客户端和服务端demo 的相关文章

  • @RestController 没有 @ResponseBody 方法工作不正确

    我有以下控制器 RestController RequestMapping value base url public class MyController RequestMapping value child url method Req
  • JVisualVM/JConsole 中的 System.gc() 与 GC 按钮

    我目前正在测试处理 XML 模式的概念验证原型 并围绕一个非常消耗内存的树自动机外部库 我已经获得了源代码 构建 我想绘制 真实峰值 堆 随着模式大小的增加 不同运行的内存消耗 使用的指标符合我的目的并且不会影响问题 或者至少是它的合理近似
  • “java.net.MalformedURLException:未找到协议”读取到 html 文件

    我收到一个错误 java net MalformedURLException Protocol not found 我想读取网络上的 HTML 文件 mainfest uses permission android name android
  • Java:在 eclipse 中导出到 .jar 文件

    我正在尝试将 Eclipse 中的程序导出到 jar 文件 在我的项目中 我添加了一些图片和 PDF s 当我导出到 jar 文件时 似乎只有main已编译并导出 我的意愿是如果可能的话将所有内容导出到 jar 文件 因为这样我想将其转换为
  • 在 Wildfly 中与 war 部署共享 util jar 文件

    假设我有一个名为 util jar 的 jar 文件 该 jar 文件主要包含 JPA 实体和一些 util 类 无 EJB 如何使这个 jar 可用于 Wildfly 中部署的所有 war 无需将 jar 放置在 war 的 WEB IN
  • org.hibernate.QueryException:无法解析属性:文件名

    我正在使用休眠Criteria从列中获取值filename在我的桌子上contaque recording log 但是当我得到结果时 它抛出异常 org hibernate QueryException 无法解析属性 文件名 com co
  • Integer.parseInt("0x1F60A") 以 NumberformatException 结束

    我尝试从数据库中获取长字符串内的表情符号代码 格式如下 0x1F60A 所以我可以访问代码 但它将是String 起初 我尝试通过执行以下操作来转换变量tv setText beforeEmo getEmijoByUnicode int e
  • 大数据使用什么数据结构

    我有一个包含一百万行的 Excel 工作表 每行有 100 列 每行代表一个具有 100 个属性的类的实例 列值是这些属性的值 哪种数据结构最适合在这里使用来存储数百万个数据实例 Thanks 这实际上取决于您需要如何访问这些数据以及您想要
  • 使用 JUnit 时,有没有办法验证测试方法中是否调用了 try/catch 指令的 Catch 部分?

    例如 如果我想测试以下课程 public class SomeClass public void someMethod try Some code where comething could go wrong catch Exception
  • 自动生成Flyway的迁移SQL

    当通过 Java 代码添加新模型 字段等时 JPA Hibernate 的自动模式生成是否可以生成新的 Flyway 迁移 捕获自动生成的 SQL 并将其直接保存到新的 Flyway 迁移中 以供审查 编辑 提交到项目存储库 这将很有用 预
  • 是否可以通过编程方式查找 logback 日志文件?

    自动附加日志文件以支持电子邮件会很有用 我可以以编程方式设置路径 如以编程方式设置 Logback Appender 路径 https stackoverflow com questions 3803184 setting logback
  • 使用 Guice 优化注册表

    你好 今天思考了一种优化 有一些疑问 语境 我正在使用 Guice 2 进行 Java 开发 在我的网络应用程序中 我有一个转换器注册表 可以即时转换为某种类型 转换器描述如下 public class StringToBoolean im
  • 内部存储的安全性如何?

    我需要的 对于 Android 我需要永久保存数据 但也能够编辑 并且显然是读取 它 用户不应访问此数据 它可以包含诸如高分之类的内容 用户不得对其进行编辑 我的问题 我会 并且已经 使用过Internal Storage 但我不确定它实际
  • HashMap 值需要不可变吗?

    我知道 HashMap 中的键需要是不可变的 或者至少确保它们的哈希码 hashCode 不会改变或与另一个具有不同状态的对象发生冲突 但是 HashMap中存储的值是否需要与上面相同 为什么或者为什么不 这个想法是能够改变值 例如在其上调
  • 在 SWT/JFace RCP 应用程序中填充巨大的表

    您将如何在 SWT 表中显示大量行 巨大是指超过 20K 行 20 列的东西 不要问我为什么需要展示那么多数据 这不是重点 关键是如何让它尽可能快地工作 这样最终用户就不会厌倦等待 每行显示某个对象的实例 列是其属性 一些 我想使用 JFa
  • 是否可以使用 Java Guava 将函数应用于集合?

    我想使用 Guava 将函数应用于集合 地图等 基本上 我需要调整 a 的行和列的大小Table分别使所有行和列的大小相同 执行如下操作 Table
  • Spring-ws:如何从没有“Request”元素的 xsd 创建 Wsdl

    尝试为客户端实现 SOAP Web 服务 我需要一个 wsdl 文件来通过soapUI 测试该服务 但正如您在下面看到的 这个 xsd 没有 Request 和 Response 方法 所有请求和响应都被定义为基本 ServiceProvi
  • Android:无法发送http post

    我一直在绞尽脑汁试图弄清楚如何在 Android 中发送 post 方法 这就是我的代码的样子 public class HomeActivity extends Activity implements OnClickListener pr
  • 洪水填充优化:尝试使用队列

    我正在尝试创建一种填充方法 该方法采用用户指定的初始坐标 检查字符 然后根据需要更改它 这样做之后 它会检查相邻的方块并重复该过程 经过一番研究 我遇到了洪水填充算法并尝试了该算法 它可以工作 但无法满足我对 250 x 250 个字符的数
  • Spring表单ModelAttribute字段验证避免400 Bad Request错误

    我有一个ArticleFormModel包含正常发送的数据html form由 Spring 使用注入 ModelAttribute注释 即 RequestMapping value edit method RequestMethod PO

随机推荐

  • python爬取今日头条后台数据_爬虫爬取今日头条数据代码实现

    课程链接 讲师的公众号文章 今日头条数据抓取及持久化 完整代码版 含IP和用户代理 mp weixin qq com 课程代码 抓取并持久化user agent工具utils py 对于爬虫工具 需要设置发起请求的user agent im
  • Spring Boot 框架基础

    Spring Boot 框架基础 基础案例 pom xml
  • BUCK LX_OUT Snubber电路

    1 问题 开关节点振铃 过冲 开关节点过冲会导致LX OUT管脚的电压过高 如果超过datasheet上的maximum值 就有可能影响DCDC芯片寿命 2 产生振铃 过冲的原因 2 1 输入电容摆放不正确 2 2 输出电感 电容摆放不正确
  • STM32F103滴答计时器之delay函数

    如果使用FreeRTOS void delay us u32 nus u32 ticks u32 told tnow tcnt 0 u32 reload SysTick gt LOAD ticks nus fac us tcnt 0 del
  • k8s删除deployment_k8s灾备指南(Velero)

    最近验证了使用velero对k8s进行灾难恢复 操作验证步骤如下 1 下载verlero 解压 tar xvf
  • java案例15:模拟订单号生成

    思路 模拟订单号生成 超市购物时 小票上都会有一个订单号 且订单号唯一 编写程序模拟订单系统中订单号的生成 生成订单号时 使用年月日和毫秒值组合生成唯一订单号 例如 给一个包括年月日和毫秒值的数组arr 2023 0401 1100 将其拼
  • git解决代码冲突、合并代码

    共同开发时提交代码会遇到代码冲突 第一次遇到就手足无措的我 打算写一篇博客记录下来 下次遇到稳如老狗 一 远程代码已有更新记录 忘记拉取远程代码 直接提交 单人开发时 我没有先拉远程代码再提交的习惯 千万不要学习 一定要先拉代码再提交 导致
  • 关于odoo条码显示问题处理

    这里分几种情况 1 第一种情况 打印的单据不显示条码 这种情况比较常见 一般是 没有对应字体导致 不能正常显示条码 单据打印的条码 一片空白 无条码的情况 这种情况是因为 条码的字体没有安装 需要安装一下 这里我会把资源上传 大家可以下载
  • Mac texlive+texstudio 如何手动安装宏包

    1 从CTAN上搜索自己需要的package 2 以subfigure为例 选择第一个结果 下载下来 3 解压下载后的文件 这时候发现里面并没有 sty文件 在终端中输入latex subfigure即可生成需要的sty文件 将整个文件夹保
  • nuxt.js-------koa2项目,环境错误一次性解决

    nuxt js虽然好用但是自己的脚手架安装完全是坑 cnpm run dev 报错确实main js node环境nuxt版本不匹配 在网上找了很多解决方法没有解决 就一次性把所有脚手架和环境都升级到最新版本 npm install bac
  • Nginx 负载均衡 - fair

    学习在 Nginx 中使用 fair 模块 第三方 来实现负载均衡 fair 采用的不是内建负载均衡使用的轮换的均衡算法 而是可以根据页面大小 响应时间智能的进行负载均衡 1 准备工作 nginx upstream fair 官方下载地址
  • 使用Nuxt.js框架开发(SSR)服务端渲染项目

    SSR 服务端渲染的优缺点 优点 1 前端耗时少 首屏加载速度快 因为后端拼接完了html 浏览器只需要直接渲染出来 2 有利于SEO 因为在后端有完整的html页面 所以爬虫更容易爬取获得信息 更有利于seo 3 无需占用客户端资源 即解
  • flutter 文字从左到右轮播滚动,跑马灯

    参考 description begin 跑马灯 根据滚动方向可以分为 横向滚动 和 纵向滚动 此页实现的跑马灯是 横向滚动的 description end import dart async import package flutter
  • Shell—变量、字符串和数组

    本文主要讲解Shell变量 字符串和数组的相关知识 一 Shell变量 1 变量的定义 运行shell时 会同时存在三种变量 1 局部变量 局部变量在脚本或命令中定义 仅在当前shell实例中有效 其他shell启动的程序不能访问局部变量
  • 区块链+教育:区块链是底层技术,教育才是本质!

    建国君民 教育为先 国愚是智可以强国 国智则力可以强人 依教建国 以智强国 是中国古代先贤就教育强国思想的重要体现 每次的教育改革也牵动着无数人的心 也有很多人关心未来的教育会走向哪里 百年大计 教育为先 随着人们对教育行业的关注度逐渐提升
  • HECO使用docker部署单节点的开发网

    文章目录 一 编写说明 1 1 文档说明 1 2 配置信息 1 3 部署文档信息 二 heco开发网镜像生成 三 heco主链容器生成 3 1 配置文件编写 3 2 预先创建一个账户地址 3 3 创建genesis json 3 4 初始化
  • Android加密 看雪,Android加密与解密入门两题

    写在最前面 本次题目来自看雪2w班9月题 密码学一直是安全的基础 Android安全也不例外 这次9月份的题分别从java层和C层考察了密码学中常用的对称加密 hash函数以及一些基础的编码 但是不是单纯的算法分析题 可以说是很好的练习题了
  • ResNet网络加入CBAM注意力机制

    首先定义resnet cbam py 如图 import torch import torch nn as nn import math import torch utils model zoo as model zoo all ResNe
  • python中retry的用法

    异常重试retry retry是一个用于错误处理的模块 功能类似try except 但更加快捷方便 retry模块中retry 的基本用法 retry 的功能是在其装饰的函数运行报错后重新运行该函数 retry 有几个主要参数 excep
  • Vert.x:一个简单的Tcp客户端和服务端demo

    1 声明 当前内容主要为记录和学习使用Vert x创建Tcp服务并实现通信的demo 当前内容参考官方文档 2 Server Demo import io vertx core AbstractVerticle import io vert