首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >基于frp和云服务器实现局域网内电脑的远程桌面连接

基于frp和云服务器实现局域网内电脑的远程桌面连接

原创
作者头像
半桶水到一桶水
发布于 2021-12-02 11:59:29
发布于 2021-12-02 11:59:29
13.9K0
举报

写这篇文字的原因是因为作者觉得向日葵免费版太拉跨了,所以找到了这个方法来进行远程桌面连接,在此进行记录分享。

作者在实验室里用台式机,然后在寝室里用笔记本,两台电脑都装了向日葵免费版。在某天夜里需要用到台式机,于是使用笔记本通过向日葵远程连接到台式机,但是网速实在不敢恭维,反正就是那天夜里的使用体验极其糟糕,于是想到了使用微软自带的远程桌面连接(毕竟没有中间商赚差价)。

不过微软自带的远程桌面连接需要被连接的电脑是具有公网 ip 的,或者连接与被连接的两台电脑在同一个局域网内,公网ip自然是没有的,同时发现两台电脑也并不在同一个局域网内(虽然寝室和实验室都在学校里,网络也都属于学校的局域网,但是好像在学校内部又被分成了两个局域网)。

在上网搜索相关解决方案后,发现了 frp 这个项目, frp 主要就是解决被连接电脑没有公网ip的问题。

在使用 frp 之前,我们需要一个云服务器,各大云服务厂商都有的卖,学生还挺优惠的(我是白嫖的,一分钱没花还挣了2块钱,感谢鱼皮大大),一般买了云服务器都会绑定一个公网 ip ,我们可以通过这个公网 ip 来进行远程连接,以下介绍如何使用 frp 和云服务器来实现远程桌面连接。

frp 的项目地址:frp项目的github开源地址

注意:被连接的电脑需要打开允许远程连接桌面功能,一般 windows 专业版都可以打开这个功能, windows 家庭版的这个功能默认是不被允许打开的(网上有教如何打开家庭版的远程连接功能),必须要先打开这个功能,才能实现远程连接桌面。

用法:

下载安装与配置

首先,根据所使用的操作系统在该项目的开源仓库中下载该项目最新的发行版程序,这里我们需要在云服务器上下载一次,在我们需要连接的这台电脑上下载一次,下载下来的程序文件都是一样的:

image.png
image.png

事实上,在云服务器上只需要用到frps.exefrps.ini这两个文件,在被访问的电脑上只需要用到frpc.exefrps.ini这两个文件。

作者的云服务器使用的是 centos 系统,在/usr/local路径下新建frp目录,将frps.exefrps.ini两个文件放进了该目录:

image.png
image.png

frps.ini的内容修改如下:

代码语言:txt
AI代码解释
复制
[common]
bind_port = 7000

同时记得将云服务器的7000端口放通,这个端口可以自己设置,只要没有被使用过就可以。

在被连接电脑上,修改frpc.ini如下:

代码语言:txt
AI代码解释
复制
[common]
server_addr = 123.234.456.25 #云服务器的公网ip
server_port = 7000

[RDP]
type = tcp
local_ip = 127.0.0.1
local_port = 3389
remote_port = 7001  #通过该端口来连接电脑

记得将云服务器的7001端口也放通。

启动frp服务端:

代码语言:txt
AI代码解释
复制
./frps -c ./frps.ini

启动frp客户端:

代码语言:txt
AI代码解释
复制
frpc -c frpc.ini

当命令行中显示如下结果时代表启动成功:

image.png
image.png

这个时候使用另一台电脑,win+R,运行mstsc,打开 windows 自带的远程桌面连接,在计算机栏中输入 123.234.456.25:7001 ,如下所示:

image.png
image.png

连接,然后在弹出框中输入用户名和密码,即可远程连接桌面啦!

设置自启动
服务器端

前面说到的服务端是通过命令启动的,一旦关闭远程连接,服务就会关闭,那怎么让服务保持后台运行呢?

下载的 frp 文件夹可以看到一个systemd目录,将其中的 frps.service 文件复制到服务器的 /etc/systemd/system/ 目录下,并修改 ExecStart=/usr/local/frp/frps -c /usr/local/frp/frps.ini,完整配置文件如下:

代码语言:txt
AI代码解释
复制
[Unit]
Description=Frp Server Service
After=network.target

[Service]
Type=simple
User=nobody
Restart=on-failure
RestartSec=5s
ExecStart=/usr/local/frp/frps -c /usr/local/frp/frps.ini

[Install]
WantedBy=multi-user.target

设置 frps 服务开机启动:

代码语言:txt
AI代码解释
复制
sudo systemctl enable frps

启动 frps 服务:

代码语言:txt
AI代码解释
复制
sudo systemctl start frps

这样 frps 服务就可以在后台运行了,即使服务器关机重启也会自动启动。

客户端

此处参考:Windows设置frpc开机自动启动(不管用户是否登陆都要运行)_gdali的专栏-CSDN博客_frpc开机自启动

具体内容如下:

新建start.bat,内容如下(放到自己frpc实际目录下):

代码语言:txt
AI代码解释
复制
@echo off
:home
frpc -c frpc.ini
goto home

打开开始菜单,输入 “任务计划程序” 将会自动搜索,接着打开它。

image.png
image.png

点击右侧的 “创建任务”,名称随意填写,安全选项选择 “不管用户是否登录都要运行”,当然你也可以选择 “只在用户登录时运行”。

选择 “不管用户是否登录都要运行” 可以让你的电脑在断电自动启动后自动运行 frp,你就可以远程桌面连接电脑了。

“使用最高权限运行” 也是可选的,根据个人需要可以选上。

最后勾选 “隐藏”,就不会在启动时弹出命令行窗口了。

image.png
image.png

接着转到 “触发器” 页,点击新建,选择 “启动时”

image.png
image.png

接着转到 “操作” 页,点击新建,选择 “启动程序”

在程序或脚本一栏选择第一步创建的 start.bat,下面的 “起始于” 填写 start.bat 的路径(不要包含 start.bat)

例如你的 start.bat 在 E:\frp\start.bat,那么你只需要在 “起始于” 填写 E:\frp\

image.png
image.png

接着返回 “常规” 页,点击确定,此时会要求输入密码,输入你的电脑密码,然后点击确定即可。

以后就会开机自动启动 frp 了,并且不会弹出命令提示符窗口。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
RTTI和类型转换运算符
RTTI是运行阶段类型识别(Runtime Type Identification)的简称。该特性是为了程序在运行阶段确定对象类型提供一种标准方式。
艰默
2022/12/12
6610
c++类型转换与RTTI运行阶段类型识别
我们都知道C++完全兼容C语言,C语言的转换方式很简单,可以在任意类型之间转换,但这也恰恰是缺点,因为极其不安全,可能不经意间将指向const对象的指针转换成非const对象的指针,可能将基类对象指针转成了派生类对象的指针,这种转换很容易出bug,需要严格审查代码才能消除这种隐患,但是C这种转换方式不利于我们审查代码,且程序运行时也可能会出bug。
芯动大师
2023/07/15
2960
c++类型转换与RTTI运行阶段类型识别
C++:从技术实现角度聊聊RTTI
第一次接触RTTI,是在<<深度探索c++对象模型>>这本书中,当时对这块的理解比较浅,可能因为知识积累不足吧。后面在工作中用到的越来越多,也逐渐加深了对其认识,但一直没有一个系统的认知,所以抽出一段时间,把这块内容整理下。
高性能架构探索
2023/06/13
1.4K0
C++:从技术实现角度聊聊RTTI
浅析C++中的RTTI:运行时类型识别
在 C++ 编程中,我们经常需要处理各种复杂的对象类型和继承层次结构。在某些情况下,我们需要在运行时了解对象的真实类型,并根据其类型执行相应的操作。这正是 RTTI(Run-Time Type Identification)的用武之地。
程序员的园
2024/07/18
2060
浅析C++中的RTTI:运行时类型识别
C++:16---强制类型转换和类型转换
旧式的强制类型转换 在早期C/C++中,显式地进行强制类型的转换有以下两种形式: type (expr) ; //函数形式的强制类型转换 (type) expr; //C语言风格的强制类型转换 比如: char c = '12'; int b = (int)c; float f = float(b); C++的新式强制类型转换 命名的强制类型转换具有如下形式: cast-name<type> (expr); cast-name可以是
用户3479834
2021/02/03
2.2K0
【C++航海王:追寻罗杰的编程之路】C++的类型转换
在C语言中,如果赋值运算符左右两侧类型不同,或者形参与实参类型不匹配,或者返回值类型与接收返回值类型不一致时,就需要发生类型转换,C语言中总共有两种形式的类型转换:
枫叶丹
2024/06/04
2350
【C++航海王:追寻罗杰的编程之路】C++的类型转换
【C++】类型转换
在 C 语言中,如果 赋值运算符左右两侧类型不同,或者形参与实参类型不匹配,或者返回值类型与 接收返回值类型不一致时,就需要发生类型转化 , C 语言中总共有两种形式的类型转换: 隐式类型 转换和显式类型转换 。
青衫哥
2023/10/17
3140
【C++】类型转换
【C++】C++的类型转换
在 C 语言中,如果 赋值运算符左右两侧类型不同,或者形参与实参类型不匹配,或者返回值类型与
小文要打代码
2025/05/20
900
运行时类型识别
运行时类型识别(run-time type identification, RTTI)的功能由两个运算符实现:
Rock_Lee
2020/10/15
8970
C++的类型转换
在C语言中,如果赋值运算符左右两侧类型不同,或者形参与实参类型不匹配,或者返回值类型与 接收返回值类型不一致时,就需要发生类型转化,C语言中总共有两种形式的类型转换:隐式类型 转换和显式类型转换。
ljw695
2024/10/18
2650
C++的类型转换
c++15.0 RTTI机制, 类型转换操作, 表达式类型推断与获取
---- c++的语法,我准备要结束了,c++东西还有很多,比如多线程,c11新特性等,我不是很熟,以后有时间在补充吧。准备写c#了,原本准备开始java语法的,但是看到简书上面好多是有关java的文章,写的都很不错(至少我感觉写不出更好的了),决定换一个方向,语法是通用的,但是还是有些不同之处,c#的.net平台,好歹是能和j2ee对立的,怎么能没有人介绍了。 ---- 知识点综述: ---- RTTI机制: 通过运行时类型识别,程序通过使用基类的指针或者引 用来检查这些指针或引用所指向对象的实际类
热心的社会主义接班人
2018/04/27
1.1K0
c++15.0 RTTI机制, 类型转换操作,  表达式类型推断与获取
【C++高阶】C++类型转换全攻略:深入理解并高效应用
前言:在C++的浩瀚宇宙中,类型转换作为连接不同类型数据之间的桥梁,扮演着至关重要的角色。它不仅关乎程序的正确性与效率,更是深入理解C++语言特性的重要一环。随着C++语言的不断演进,类型转换的规则与技巧也日益丰富和复杂,为开发者提供了强大的灵活性和表达力
Eternity._
2024/09/18
2230
【C++高阶】C++类型转换全攻略:深入理解并高效应用
【C++】你只会强制类型转换吗?来看看C++的骚操作吧!
​ 在 C语言 中,如果赋值运算符左右两侧类型不同,或者形参与实参类型不匹配,或者返回值类型与接收返回值类型不一致时,就需要发生类型转化, C语言 中总共有两种形式的类型转换:隐式类型转换、显式类型转换。
利刃大大
2025/05/21
1560
【C++】你只会强制类型转换吗?来看看C++的骚操作吧!
C++强制类型转换操作符 dynamic_cast
dynamic_cast是四个强制类型转换操作符中最特殊的一个,它支持运行时识别指针或引用。
Tencent JCoder
2022/05/06
6700
C++强制类型转换操作符 dynamic_cast
初识C++ · 类型转换
C++可以说是恨死了隐式类型转换,你可能会疑问了,为什么?不是单参数隐式类型转换为自定义类型的时候人们还是津津乐道的吗?但是当我们模拟首先插入的某种情况的时候,可能会写这种代码:
_lazy
2024/10/16
1490
初识C++ · 类型转换
C++显性契约与隐性规则:类型转换
关于类型转换,通常是隐式转换或者强制转换,C++ 提供了一些能够显式表示转换的运算符,能够更好的规避一些风险和错误
DARLING Zero two
2025/06/12
660
RTTI简介
RTTI是Runtime Type Identification的缩写,是“运行时类型识别”的意思。面向对象的编程语言,象C++,Java,Delphi都提供了对RTTI的支持。 本文将简略介绍 RTTI 的一些背景知识、描述 RTTI 的概念,并通过具体例子和代码介绍什么时候使用以及如何使用 RTTI。本文还将详细描述两个重要的 RTTI 运算符的使用方法,它们是 typeid 和dynamic_cast。
恋喵大鲤鱼
2018/08/03
6000
【c++】类型转换
类型相近的才能发生隐式类型转换,如int和double,如果不相关,而对于指针和整型,指针是地址,整型和指针类型之间不会进行隐式类型转换,只能显式的强制类型转换:
平凡的人1
2023/10/15
3580
【c++】类型转换
QT 中的元对象系统
作为一名十几年的 C++ 程序员,最近一段时间使用 QT 开发程序,发现 QT 中还是有许多值得深入理解的技术。QT 不仅仅是一个应用程序开发框架,还有一些对标准 C++ 的扩充。本文和大家一起探讨 QT 中的元对象系统。
云水木石
2023/11/24
5600
QT 中的元对象系统
C++11类型转换
但是上边的代码会出现一个问题,就是运行结果显示,a还是2,不过当我们打开监视窗口可以看到a其实已经被改成3了,这是什么原因呢?
芝士就是菜
2023/04/20
4490
C++11类型转换
相关推荐
RTTI和类型转换运算符
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档