Websocket服务端结合内网穿透发布公网实现远程访问发送信息
文章目录
- 1. Java 服务端demo环境
- 2. 在pom文件引入第三包封装的netty框架maven坐标
- 3. 创建服务端,以接口模式调用,方便外部调用
- 4. 启动服务,出现以下信息表示启动成功,暴露端口默认9999
- 5. 创建隧道映射内网端口
- 6. 查看状态->在线隧道,复制所创建隧道的公网地址加端口号
- 7. 以基于go的socket客户端为例,通过公网连接java socket服务端
- 8. 通过git下载websocket框架
- 9. 创建客户端, 注意:Host值为上面复制的隧道公网地址!!
- 10. 接着启动服务,与服务端连接,出现服务端返回的字样表示连接成功
- 11. 客户端在控制台输入信息,回车
- 12. 服务端出现客户端发送的信息
- 13. 服务端控制台输入消息,回车
- 14. 客户端收到服务端回复的消息,连接成功
本文主要介绍如何使用内网穿透工具生成公网TCP地址实现Websocket客户端远程连接本地Websocket服务端进行通信,无需公网IP也不用设置路由器。
1. Java 服务端demo环境
- jdk1.8
- 框架:springboot+maven
- 工具IDEA
2. 在pom文件引入第三包封装的netty框架maven坐标
<dependency><groupId>io.github.fzdwx</groupId><artifactId>sky-http-springboot-starter</artifactId><version>0.10.6</version>
</dependency>
注意:pom文件里需注释掉springbootweb启动器,web启动器默认是tomcat服务启动,会和netty服务冲突

3. 创建服务端,以接口模式调用,方便外部调用
@GetMapping("/getConnect")
public void getConnect(HttpServerRequest request){request.upgradeToWebSocket(ws -> {ws.mountOpen(h->{ws.send("连接成功,开始聊天吧!");});ws.mountText(s -> {System.out.println(s);//对方回复System.out.println("客户端回复: "+s);//获取控制台输入的值Scanner scanner =new Scanner(System.in);String next = scanner.next();ws.send(next);});});}
4. 启动服务,出现以下信息表示启动成功,暴露端口默认9999

5. 创建隧道映射内网端口
这里我们用cpolar内网穿透来映射内网端口,它支持http/https/tcp协议,不限制流量,无需公网ip,也不用设置路由器,操作简单。
- cpolar一键安装脚本:(国内用户)
curl -L https://www.cpolar.com/static/downloads/install-release-cpolar.sh | sudo bash
- 或短链接安装方式:(国外用户)
curl -sL https://git.io/cpolar | sudo bash
- 查看cpolar版本信息
cpolar version
如果正常显示,则安装成功
- cpolar进行token认证
cpolar官网:https://www.cpolar.com/
进入cpolar官网,注册一个账号并登录进入后台,点击左侧的验证,可以查看到token码,复制并执行命令进行认证
cpolar authtoken xxxxxxxxxxxxxxxxxx
- 配置cpolar开机自启动
sudo systemctl enable cpolar
- 守护进程方式,启动cpolar
sudo systemctl start cpolar
- 查看cpolar守护进程状态,如正常为active,则为正常启动状态
sudo systemctl status cpolar
cpolar安装成功后,默认会配置两个默认隧道:一个ssh隧道和一个website隧道,可自行删减或者修改。
接着把本地服务通过cpolar暴露到公网,浏览器访问http://127.0.0.1:9200,登录cpolar web ui 界面,创建一个tcp隧道,指向9999端口

注意:该隧道选择的是临时tcp地址和端口,24小时内会变化,如需固定tcp地址,可升级为专业套餐做tcp地址固定!
6. 查看状态->在线隧道,复制所创建隧道的公网地址加端口号

此时,websocket服务端已经从本地localhost暴露至公网,接着我们创建一个客户端测试公网访问socket服务端连接
7. 以基于go的socket客户端为例,通过公网连接java socket服务端
- go版本:1.19
- 工具:vscode
8. 通过git下载websocket框架
go get github.com/gorilla/websocket

9. 创建客户端, 注意:Host值为上面复制的隧道公网地址!!
package mainimport ("fmt""log""net/url""github.com/gorilla/websocket"
)func main() {// 定义服务端的地址u := url.URL{Scheme: "ws",Host: "3.tcp.vip.cpolar.cn:10793", //地址为复制隧道的公网地址Path: "/eth/getConnect"} //服务端controller 映射地址// 与服务端建立连接c, _, err := websocket.DefaultDialer.Dial(u.String(), nil)if err != nil {log.Fatal("dial:", err)}defer c.Close()// 阻塞主线程down := make(chan byte)// 启动一个线程,读取从服务端发送过来的数据go func() {for {_, message, _ := c.ReadMessage()fmt.Println("服务端回复:" + string(message))}}()//启动一个线程输入消息go func() {for {var input stringfmt.Scanln(&input)c.WriteMessage(websocket.TextMessage, []byte(input))}}()for {<-down}
}
10. 接着启动服务,与服务端连接,出现服务端返回的字样表示连接成功

11. 客户端在控制台输入信息,回车

12. 服务端出现客户端发送的信息

13. 服务端控制台输入消息,回车

14. 客户端收到服务端回复的消息,连接成功

需要注意,免费使用cpolar所生成的公网地址为随机临时地址,24小时内会发生变化。如果需要长期远程连接,建议为其配置固定的tcp端口地址。即登录cpolar官网后,点击预留,保留一个固定tcp端口地址,然后将其配置到相应的隧道中即可。
相关文章:
Websocket服务端结合内网穿透发布公网实现远程访问发送信息
文章目录 1. Java 服务端demo环境2. 在pom文件引入第三包封装的netty框架maven坐标3. 创建服务端,以接口模式调用,方便外部调用4. 启动服务,出现以下信息表示启动成功,暴露端口默认99995. 创建隧道映射内网端口6. 查看状态->在线隧道,复制所创建隧道的公网地址加端口号7. 以…...
GitHub 的底层数据库从 MySQL 5.7 无缝升级到 MySQL 8.0 的实践经验
提到 MySQL 这个数据库软件,相信大家再熟悉不过了,不论是市场流行度还是占有率一直一来都非常靠前。 那再提到 MySQL 5.7 这个具体的版本,大家是不是也同样感到非常熟悉? 相信不少个人或者团队的生产环境所用的 MySQL 数据库也曾…...
概率图模型在自然语言处理中的应用
概率图模型在自然语言处理(NLP)中的应用广泛且重要,它结合了概率论和图论,为处理复杂系统中变量之间的概率依赖关系提供了有效的建模方法。以下是概率图模型在NLP中的几个主要应用,结合参考文章中的相关信息进行详细说明: 核心概念与分类: 概率图模型的核心思想是利用图…...
AI网络爬虫:对网页指定区域批量截图
对网页指定区域批量截图,可以在deepseek的代码助手中输入提示词: 你是一个Python编程专家,一步一步的思考,完成一个对网页指定区域截图的python脚本的任务,具体步骤如下: 设置User-Agent: Mozilla/5.0 (…...
centos系统清理docker日志文件
centos系统清理docker日志文件 1.查看docker根目录位置2.清理日志 1.查看docker根目录位置 命令:docker info ,将Docker Root Dir 的值复制下来。如果目录中包含 等特殊符号的目录,需要转义 2.清理日志 创建文件:vim docker_logs_clean.…...
算法金 | Python 中有没有所谓的 main 函数?为什么?
大侠幸会,在下全网同名[算法金] 0 基础转 AI 上岸,多个算法赛 Top [日更万日,让更多人享受智能乐趣] 定义和背景 在讨论Python为何没有像C或Java那样的明确的main函数之前,让我们先理解一下什么是main函数以及它在其他编程语言…...
RocketMQ相关知识知多少
一、RocketMQ的定义 官网网址:领域模型概述 | RocketMQ Apache RocketMQ 自诞生以来,因其架构简单、业务功能丰富、具备极强可扩展性等特点被众多企业开发者以及云厂商广泛采用。历经十余年的大规模场景打磨,RocketMQ 已经成为业内共识的金…...
C++vector部分实现及感悟
myvector.h #pragma once #include<assert.h> #include<iostream> #include<vector> using namespace std; namespace bit {template<class T>//必须使用typename场景\template<typename T>与template<class T>一般情况下这两个通用&#…...
MySql什么时候表锁or行锁?
文章目录 锁的基本概念共享锁(读锁)排他锁(写锁)锁的兼容性锁的升级和降级 全局锁、表锁、行锁全局锁表锁行锁 何时使用行锁何时使用表锁额外思考: 在数据库的世界里,性能优化是一个永恒的话题。MySQL作为广…...
Stable Diffusion WebUI详细使用指南
Stable Diffusion WebUI(AUTOMATIC1111,简称A1111)是一个为高级用户设计的图形用户界面(GUI),它提供了丰富的功能和灵活性,以满足复杂和高级的图像生成需求。由于其强大的功能和社区的活跃参与&…...
Android中focusableInTouchMode会导致第一次点击事件失效
我们很多时候会对某些View设置点击事件,但是,当对这个View同时设置了focusableInTouchModetrue时,第一次点击事件会被消费为为此View获取焦点。 <Viewandroid:id"id/v_click"android:layout_width"match_parent"andr…...
C语言| 输出菱形*(梳理篇II)
C语言| 输出菱形*-CSDN博客 凡事还是得自己独立思考后,写一遍程序才能发现问题所在。 容易犯的错误: 【完整程序注释】 运行结果 /* 输出菱形 1 总行数 n为奇数,分上三角形下三角形,只考虑左边的空格和星号* 2 上三角形 行数…...
conda使用
因为时不时搜索conda操作,就想着逐步将先前的conda使用整理在一起,并添加新的内容。 目录 0.简介1.常用操作场景1.1 取消终端conda自动启动 0.简介 1.常用操作场景 1.1 取消终端conda自动启动 安装conda后取消命令行前出现的base,取消每次…...
适合小白学习的项目1949java图片管理系统 Myeclipse开发mysql数据库web结构java编程计算机网页项目
一、源码特点 java图片管理系统 是一套完善的web设计系统,对理解JSP java编程开发语言有帮助采用了java设计,系统具有完整的源代码和数据库,系统采用web模式,系统主要采用B/S模式开发。开发 环境为TOMCAT7.0,Myeclipse8.5开发&…...
Jmeter实战教程入门讲解
前言 通过前面对Jmeter元件的讲解,大家应该都知道常用元件的作用和使用了。编写Jmeter脚本前我们需要知道Jmeter元件的执行顺序,可以看看我这篇性能测试学习之路(三)—初识Jmeter来了解下。下面我将以工作中的一个简单的实例带大…...
Flutter 中的 PrimaryScrollController 小部件:全面指南
Flutter 中的 PrimaryScrollController 小部件:全面指南 Flutter 是一个由 Google 开发的跨平台 UI 框架,它允许开发者使用 Dart 语言构建高性能、美观的移动、Web 和桌面应用。在 Flutter 的滚动机制中,PrimaryScrollController 起着至关重…...
Windows线程同步的四种方式和区别
1. Windows线程同步的四种方式 2. 区别 Critical Section更多强调的是保护,Event对象、Mutex对象与Semaphore对象更多的强调的是同步;Critical Section对象是无法设置等待超时的,而其他三个对象则可以设置等待超时,从这一点来讲…...
C++ 20新特性之Concepts
C20的新特性之一Concepts,为C的模板编程带来了重大的改进和便利。以下是关于C20中Concepts特性的详细介绍: 基本概念 定义:Concepts是C20中引入的一种新的语言特性,用于限制类和函数模板的模板类型和非类型参数。它允许你为模板编…...
MATLAB基础应用精讲-【数模应用】SPSSAU数据处理
目录 SPSSAU 标题修改 1、说明 2、举例 数据标签 1、说明 2、举例...
AI大模型探索之路-实战篇15: Agent智能数据分析平台之整合封装Tools和Memory功能代码
系列篇章💥 AI大模型探索之路-实战篇4:深入DB-GPT数据应用开发框架调研 AI大模型探索之路-实战篇5:探索Open Interpreter开放代码解释器调研 AI大模型探索之路-实战篇6:掌握Function Calling的详细流程 AI大模型探索之路-实战篇7…...
NeuroKit2:Python神经生理信号处理的全流程解决方案
NeuroKit2:Python神经生理信号处理的全流程解决方案 【免费下载链接】NeuroKit NeuroKit2: The Python Toolbox for Neurophysiological Signal Processing 项目地址: https://gitcode.com/gh_mirrors/ne/NeuroKit 神经生理信号处理是连接生理数据与临床洞察…...
4步实现专业黑苹果配置:OpCore-Simplify零代码自动化解决方案
4步实现专业黑苹果配置:OpCore-Simplify零代码自动化解决方案 【免费下载链接】OpCore-Simplify A tool designed to simplify the creation of OpenCore EFI 项目地址: https://gitcode.com/GitHub_Trending/op/OpCore-Simplify OpCore-Simplify是一款革命性…...
Qwen3.5-9B-AWQ-4bit与Claude对比评测:开源与闭源模型的技术选型
Qwen3.5-9B-AWQ-4bit与Claude对比评测:开源与闭源模型的技术选型 1. 评测背景与目标 在AI大模型领域,开源与闭源模型的选择一直是开发者面临的重要决策。本次评测聚焦于两款在开发者社区中备受关注的模型:开源的Qwen3.5-9B-AWQ-4bit和闭源的…...
安全自定义暗黑2体验:d2s-editor的无门槛存档编辑方案
安全自定义暗黑2体验:d2s-editor的无门槛存档编辑方案 【免费下载链接】d2s-editor 项目地址: https://gitcode.com/gh_mirrors/d2/d2s-editor 副标题:从零开始的本地化存档修改掌握之路 你是否曾因反复刷装备而失去对暗黑破坏神2的耐心&#x…...
CosyVoice2-0.5B实战案例:跨境电商独立站商品页嵌入式语音播放功能实现
CosyVoice2-0.5B实战案例:跨境电商独立站商品页嵌入式语音播放功能实现 1. 引言:当商品介绍会“说话” 想象一下,你正在浏览一个海外独立站的商品页面,琳琅满目的图片和文字描述让你有些眼花缭乱。这时,你看到一个“…...
vLLM部署Qwen模型报错‘找不到libcuda.so’?别慌,一个环境变量就搞定
vLLM部署Qwen模型报错"找不到libcuda.so"的深度解决方案 当你在私有化部署vLLM框架运行Qwen大语言模型时,遇到/usr/bin/ld: cannot find -lcuda这类链接错误,这实际上是Linux系统中动态链接器无法定位CUDA驱动库的典型表现。本文将带你深入理…...
apache-dolphinscheduler-3.4.1调度器配置虚拟机
1、下载文件3.4.1下载安装包https://mirrors.tuna.tsinghua.edu.cn/apache/dolphinscheduler/3.4.1/ 2、传到虚拟机/home/spark2下 3、解压并重命名 4、初始化 MySQL 数据库 (1)启动 MySQL 服务 (2)登录 MySQL(输入 r…...
Comsol水力压裂:考虑流固耦合损伤及热流固耦合的裂缝扩展模型
comsol水力压裂,裂缝扩展模型流固耦合损伤和热流固耦合损伤 在这个模型里面考虑了温度场、应力场、压力场和损伤场,采用的是Comsol内置的接口建模 整个模型呈正方形,内部开一个圆孔 在圆孔内壁施加高压低温流体,模型外边界在这个模…...
OmX与边缘计算:打造高效边缘设备的AI助手完整指南
OmX与边缘计算:打造高效边缘设备的AI助手完整指南 【免费下载链接】oh-my-codex OmX - Oh My codeX: Your codex is not alone. Add hooks, agent teams, HUDs, and so much more. 项目地址: https://gitcode.com/GitHub_Trending/oh/oh-my-codex OmX&#x…...
域名 WHOIS 信息对于 SEO 优化有什么作用
域名 WHOIS 信息对于 SEO 优化有什么作用 在当今互联网时代,搜索引擎优化(SEO)已经成为了每个网站运营者必须掌握的技能之一。其中,域名 WHOIS 信息也扮演了一定的角色。许多人可能对这一点并不十分了解,本文将详细探…...
