本地websocket服務端暴露至公網訪問【cpolar內網穿透】

本地websocket服務端暴露至公網訪問【cpolar內網穿透】

文章目錄

    • 本地websocket服務端暴露至公網訪問【cpolar內網穿透】
        • 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. 客戶端收到服務端回復的消息,連接成功

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服務沖突

20221220152746

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

20221220152808

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端口

20221220152822

注意:該隧道選擇的是臨時tcp地址和端口,24小時內會變化,如需固定tcp地址,可升級為專業套餐做tcp地址固定!

6. 查看狀態->在線隧道,復制所創建隧道的公網地址加端口號

20221220152843

此時,websocket服務端已經從本地localhost暴露至公網,接著我們創建一個客戶端測試公網訪問socket服務端連接

7. 以基于go的socket客戶端為例,通過公網連接java socket服務端
  • go版本:1.19
  • 工具:vscode
8. 通過git下載websocket框架
go get github.com/gorilla/websocket

20221220152904

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. 接著啟動服務,與服務端連接,出現服務端返回的字樣表示連接成功

20221220152924

11. 客戶端在控制臺輸入信息,回車

20221220152933

12. 服務端出現客戶端發送的信息

20221220152943

13. 服務端控制臺輸入消息,回車

20221220152951

14. 客戶端收到服務端回復的消息,連接成功

20221220153000

需要注意,免費使用cpolar所生成的公網地址為隨機臨時地址,24小時內會發生變化。如果需要長期遠程連接,建議為其配置固定的tcp端口地址。即登錄cpolar官網后,點擊預留,保留一個固定tcp端口地址,然后將其配置到相應的隧道中即可。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/165722.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/165722.shtml
英文地址,請注明出處:http://en.pswp.cn/news/165722.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

C++設計模式之工廠模式(中)——工廠模式

工廠模式 工廠模式介紹示例示例使用運行結果工廠模式與簡單工廠模式區別 工廠模式 工廠模式在簡單工廠模式的基礎之上進行了改進。當需要生產的產品種類增加&#xff0c;可以通過新增子類工廠來生產&#xff0c;沒有破壞程序設計原則中的開放封閉原則。 介紹 工廠模式先抽象…

1.2.1 C語言結構體初始化方法總結

文章目錄 結構體定義通用定義注冊事項結構體初始化方法一簡述示例方法二簡述示例方法三簡述示例方法四簡述示例方法五簡述示例結構體定義 通用定義 常用的結構體定義,有2種形式, 一種是關鍵字struct 結構體形式,如下

域控操作五:統一熄屏睡眠時間

直接看圖路徑&#xff0c;我只設置了熄屏&#xff0c;如果要睡眠就下面那個啟用設置時間

Pytorch中的Tensorboard常用API

SummaryWriter函數 這個函數用于創建一個tensorboard文件&#xff0c;其中常用參數有 log_dir&#xff1a;tensorboard文件的存放路徑。不設置log_dir默認會在當前程序所在的文件夾下創建個runs文件夾存儲flush_secs&#xff1a;表示寫入tensorboard文件的時間間隔comment&…

一文2000字使用JMeter進行接口測試教程!(建議收藏)

安裝 使用JMeter的前提需要安裝JDK&#xff0c;需要JDK1.7以上版本目前在用的是JMeter5.2版本&#xff0c;大家可自行下載解壓使用 運行 進入解壓路徑如E: \apache-jmeter-5.2\bin&#xff0c;雙擊jmeter.bat啟動運行 啟動后默認為英文版本&#xff0c;可通過Options – Cho…

IIC驅動OLED HAL庫+CubeMX

一.IIC傳輸數據的格式 1.寫操作 2.讀操作 3.IIC信號 二. IIC底層驅動 #define SCL_PIN GPIO_PIN_6 #define SDA_PIN GPIO_PIN_7#define SCL_PORT GPIOB #define SDA_PORT GPIOB/********************** 函數宏定義 **********************/ #d…

Navicat 技術指引 | 連接 GaussDB 主備版

Navicat Premium&#xff08;16.2.8 Windows版或以上&#xff09; 已支持對GaussDB 主備版的管理和開發功能。它不僅具備輕松、便捷的可視化數據查看和編輯功能&#xff0c;還提供強大的高階功能&#xff08;如模型、結構同步、協同合作、數據遷移等&#xff09;&#xff0c;這…

LangChain(0.0.339)官方文檔一:快速入門

LangChain官網、LangChain官方文檔 、langchain Github、langchain API文檔、llm-universe 文章目錄 一、LangChain簡介&#xff08;v0.0.338&#xff09;1.1 整體框架1.2 主要組件1.2.1 Model I/O1.2.2 Retrieval1.2.2.1 RAG1.2.2.2 Retrieval 1.2.3 Chain 1.3 其它組件1.3.1 …

STM32筆記---RTC

目錄 一、RTC簡介 二、主要特性 三、功能描述 3.1 讀RTC寄存器 3.2 配置RTC寄存器 四、BKP簡介 五、RTC_Init() 1. 函數BKP_ReadBackupRegister 2.RCC_LSEConfig設置外部低速晶振&#xff08;LSE&#xff09; 3.RTC基本結構 5.RTC_Init()實現 6.time.h 一、R…

九州未來聯合聯通智網科技發布白皮書,促進車聯網融合發展

2023年11月21日&#xff0c;由2023中國5G工業互聯網大會組委會、工業和信息化部主辦&#xff0c;聯通智網科技承辦的2023中國5G工業互聯網大會——5G車聯網與智慧交通創新發展平行會議&#xff0c;在武漢成功舉辦。 九州未來作為中國聯通車聯網創新聯合體成員單位&#xff0c;受…

【Sql】sql server還原數據庫的時候,提示:因為數據庫正在使用,所以無法獲得對數據庫的獨占訪問權。

【問題描述】 sql server 還數據庫的時候&#xff0c;提示失敗。 點擊左下角進度位置&#xff0c;可以得到詳細信息&#xff1a; 因為數據庫正在使用&#xff0c;所以無法獲得對數據庫的獨占訪問權。 【解決方法】 針對數據庫先后執行下述語句&#xff0c;獲得獨占訪問權后&a…

【Leetcode合集】2824. 統計和小于目標的下標對數目

2824. 統計和小于目標的下標對數目 2824. 統計和小于目標的下標對數目 代碼倉庫地址&#xff1a; https://github.com/slience-me/Leetcode 個人博客 &#xff1a;https://slienceme.xyz 給你一個下標從 0 開始長度為 n 的整數數組 nums 和一個整數 target &#xff0c;請你…

線性空間(也叫向量空間)、線性運算

線性空間、線性運算 線性空間&#xff0c;也稱向量空間。 假設是一個非空集合&#xff0c;是一個實數域。 在中定義了一個加法&#xff1a;即對中任何兩個元素和&#xff0c;總有中另外一個元素與它們相對應&#xff0c;稱為和的和&#xff0c;記作&#xff1a; 在定義了一個…

mac電腦系統活動監控:iStat Menus 中文 for Mac

iStat Menus是一款Mac操作系統上的系統監控工具&#xff0c;它提供了實時的系統狀態和性能數據&#xff0c;讓用戶可以方便地監控和管理自己的電腦。iStat Menus以菜單欄圖標的形式顯示各種系統指標&#xff0c;用戶可以輕松訪問和查看這些信息。 以下是iStat Menus軟件的一些…

debian 設置系統默認以命令行方式啟動,關閉x windows

debian 設置系統默認以命令行方式啟動&#xff0c;關閉x windows 2021-01-02 tech linux 設置 grub啟動設置在/etc/default/grub中&#xff0c;打開 default grub 配置: $ sudo vim /etc/default/grub修改以下配置&#xff1a; 更新grub&#xff0c;設置多用戶啟動: …

針對MySql知識的回顧

MySql雖然是一個相對簡單的關系型數據庫&#xff0c;但也是一個最常用的數據庫&#xff0c;也是一個非常經典的數據庫&#xff0c;很多云產品也是基于MySql做了二開&#xff0c;從而變得非常強大&#xff0c;其中MySql最常用的是Innodb引擎&#xff0c;因為該引擎支持事務&…

第14章 多線程三 (線程同步)

目錄 內容說明 章節內容 1、為什么需要多線程同步? 2、Java如何實現多線程同步?

CUDA學習筆記9——CUDA 共享內存 / Shared Memory

由于共享內存擁有僅次于寄存器的讀寫速度&#xff0c;比全局內存快得多。因此&#xff0c;能夠用共享內存訪問替換全局內存訪問的場景都可以考慮做對應的優化。 不利用共享內存的矩陣乘法 不利用共享內存的矩陣乘法的直接實現。每個線程讀取A的一行和B的一列&#xff0c;并計…

『Linux升級路』基礎開發工具——gcc/g++篇

&#x1f525;博客主頁&#xff1a;小王又困了 &#x1f4da;系列專欄&#xff1a;Linux &#x1f31f;人之為學&#xff0c;不日近則日退 ??感謝大家點贊&#x1f44d;收藏?評論?? 目錄 一、快速認識gcc/g 二、預處理 &#x1f4d2;1.1頭文件展開 &#x1f4d2;1…

java字符串的常見用法

java字符串的常見用法 Java中的字符串是一個非常常用的對象&#xff0c;它屬于Java的內置類String類的實例。字符串在Java中是不可變的&#xff0c;即一旦創建了一個字符串對象&#xff0c;就不能修改它的值。 下面是一些關于Java字符串的詳細用法&#xff1a; 1&#xff09;創…