Socket远程桌面
自建Socket转发,使用远程桌面(mstsc)连接家中电脑
网络结构图如下:

开题先放图,一切全靠编哈哈。
进入正题!
如图所示,我们需要一个公网服务器,利用公网服务器将内网的数据进行转发,从而实现两个内网服务器的通讯。没错,这不是p2p,原本想做成p2p,因为有点难度,所以先弄一个tcp数据包转发,后面再来打洞进行p2p连接。
开发环境
VS2017 + asp net core2.1 + .net framework 4.5
整个过程是如何实现的呢?
1.被控客户端启动,发送被控端名称,例如:Home
2.服务器接收到被控端的数据,将Home记录,并将Home绑定到当前Tcp连接
3.主控端启动,发送要连接的“被控端服务”名称,例如:Home
4.服务端接收到主控端的请求,查询Home对应的Tcp连接
5.将从主控端来的数据转发到被控端,将被控端来的数据转发到主控端
代码在哪?
放到github上了:https://github.com/bobowire/Wireboy.Socket.P2PService
在实现的过程中遇到什么问题了?
1.由于windows锁屏后,Console.WriteLine方法会进行无限期等待,导致程序卡住不动。
解决办法:在运行后,将所有的Console.WriteLine方法全部注释掉了。
2.在连接一次之后,再次连接会因为接收函数的超时时间太长,导致后面连接失败
解决办法:增加守护线程,在进行数据传输后,开启守护线程,一旦数据传输发生超时,启动新的tcp连接进行通讯。为什么不用自带的超时?嗯,那时候没想到这个东西。
讲解一下代码吧?
代码很简单,主要是用的TcpClient和TcpListener两个类,利用Dictionary绑定Tcp连接与服务名称,所以只允许一台电脑连接被控端。如此一来,被控端的断线重连对数据的转发影响就不大了。
TcpListener类用于监听本地端口。
TcpClient类用于转发数据。
怎么使用?
请查看项目MD文件:https://github.com/bobowire/Wireboy.Socket.P2PService
运行效果图

Socket远程桌面的更多相关文章
- 树莓派raspbian安装配置(基本配置+中文配置+远程桌面+lighttpd+php+mysql)
raspbian为树莓派的官方系统,基于Debian裁剪过的Linux系统 其配置过程如下 烧录镜像 首先从树莓派的官方网站上下载镜像和镜像工具 http://www.raspberrypi.org/ ...
- CentOS服务器下JavaEE环境搭建指南(远程桌面+JDK+Tomcat+MySQL)
--------------------------------------------------------------------------------1 系统设置:1.1 远程桌面设置:通过 ...
- Windows 服务程序、窗口界面、桌面交互、与远程桌面
昨天用c写了一个windows服务(服务内部带一个gui窗口+系统托盘),在windows xp sp3上测试,启动服务后,系统托盘显示正常. 但在另一台windows 2003 sp2 上测试(通过 ...
- Windows与Linux相互远程桌面连接
对于远程桌面连接Linux,大家可能会第一时间想到使用VNC,,远程桌面Windows,大家第一时间会想到使用Windows自带的远程桌面.那么有没有办法,使得在Linux中可以远程Windo ...
- CentOS 6.8 安装TigerVNC 实现 Linux 远程桌面
CentOS 6.8 有默认的安装的 vnc 位于端口 5900 : 系统->首选项->远程桌面 勾选[共享]的选项, 取消勾选[安全]的选项, 然后防火墙添加 5900 端口 基本就可 ...
- [No00008B]远程桌面发送“Ctrl+Alt+Delete”组合键调用任务管理器
向远程桌面发送"Ctrl+Alt+Delete"组合键的两种方法 1.在本地按下Ctrl+Alt+End,可以成功发送"Ctrl+Alt+Delete"组合键! ...
- 远程桌面时plsql的复制粘贴功能失效
解决办法:重新启动远程桌面上的rdpclip进程就可以复制粘贴了,但是每次重开远程桌面都会出现同样的问题.可以rdpclip这个设置成开机启动.
- QQ远程桌面的使用
腾讯QQ怎样使用远程桌面: ---------------------- ----------------------
- [原创]用windows7连接windows2003的终端服务器时,出现"由于这台计算机没有远程桌面客户端访问许可证,远程会话被中断"的问题
用windows7连接windows2003的终端服务器时,出现"由于这台计算机没有远程桌面客户端访问许可证,远程会话被中断"的问题,原因是终端服务器授权方式设置为了"每 ...
随机推荐
- linux jdk install and tomcat install
1● linux安装jdk1.8 Download jdk1.8 export JAVA_HOME=/usr/java/jdk1.8.0_181 export JRE_HOME=${JAVA_ ...
- etymon word write alb pain high alt increase large agency ag lose weight fat assist out~3
1● alb 2● write =====>rait 1● alg 2● pain 痛,疼痛 1● alt 2● high 高 1 ...
- python2.x 与 python3.x的区别
从语言的源码角度: python2.x 的源码书写不够规范,且源码有重复,代码的复用率不高; python3.x 的源码清晰.优美.简单 从语言的特性角度: python2.x 默认为ASCII字符编 ...
- 网口扫盲二:Mac与Phy组成原理的简单分析
1. general 下图是网口结构简图.网口由CPU.MAC和PHY三部分组成.DMA控制器通常属于CPU的一部分,用虚线放在这里是为了表示DMA控制器可能会参与到网口数据传输中. MAC(Medi ...
- UVa 11825 - Hackers' Crackdown DP, 枚举子集substa = (substa - 1)&sta 难度: 2
题目 https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&a ...
- Mysql 行存储的文件格式
一.Mysql行存储的文件格式概述 InnoDB存储引擎有两种文件格式 Antelope:compact与redundant两种行记录格式 Barracuda:compress与dynamic两种行记 ...
- SpringBoot+MyBatis+Mysql 详细示例
SpringBoot与MyBatis整合,底层数据库为mysql的使用示例 项目下载链接:https://github.com/DFX339/bootdemo.git 新建maven项目,web ...
- information_schema
views 视图表,查看当前数据库有哪些视图 select table_catalog,table_schema,table_name,is_updatable,definer,security_ty ...
- 每天CSS学习之caption-side
caption-side是CSS2的属性,其作用是规定标题的位置在表格的上面还是下面. 1.top:默认值,将表格标题定位在表格之上.如下例子: caption{ caption-side:top; ...
- transiton,transform,animation,border-image
animation,transition,transform三者联系与区别: https://www.jianshu.com/p/0e0e1903b80d transform: 使用小技巧: tran ...