网络结构图如下:

开题先放图,一切全靠编哈哈。

进入正题!

如图所示,我们需要一个公网服务器,利用公网服务器将内网的数据进行转发,从而实现两个内网服务器的通讯。没错,这不是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转发,使用远程桌面(mstsc)连接家中电脑的更多相关文章

  1. 本文介绍使用windows系统自带的远程桌面mstsc连接Centos 7.x远程桌面的基本方法。

    本文介绍使用windows系统自带的远程桌面mstsc连接Centos 7.x远程桌面的基本方法. 一.前言 我希望用windows远程访问centos图形界面.xmanager连接centos远程桌 ...

  2. 启用“关闭自动根证书更新”,解决Windows系统各种卡顿的问题(Visual studio 卡、远程桌面mstsc卡、SVN卡)

    最近,发现在Win7下面一系列操作都会出现卡顿的情况: 1.  Visual studio 启动调试和关闭调试时,都会卡上半分钟左右 2.  使用远程桌面mstsc.exe,点击连接时,也会卡上半分钟 ...

  3. windows server 2016 远程桌面mstsc DPI(更改文本、应用和其他项目大小) 设置

    windows server 2016 远程桌面mstsc DPI 设置 在高分辨率机器2K,4K,8K,登入使用window远程桌面mstsc时,登入后虽然分辨率变成了和cilent一样分辨率 但是 ...

  4. 实现外网远程桌面内网的电脑和外网访问内网的FTP

     基于之前两篇文章搭建了ngrok实现了内网穿透,用过了http和https的协议完成了外网访问内网的网站,这一篇教大家用tcp协议实现外网远程桌面内网的电脑和外网访问内网的FTP. 一.外网远程桌面 ...

  5. 远程桌面不能连接,提示awgina.dll取代错误的解决办法

    远程桌面不能连接,错误提示:您不能初始化一个远程桌面连接,因为在远程计算机上的windows登录软件被不兼容的软件c:\windows\system32\awgina.dll取代,如下图所示: 原因: ...

  6. 远程桌面web连接

      我们可以利用web浏览器搭配远程桌面技术来连接远程计算机,这个功能被称为远程桌面web连接(Remote desktop web connection),要享有此功能,请先在网络上一台window ...

  7. 远程桌面无法连接 提示不支持FIPS安全级别的解决方法

    远程桌面可以通过网络连接到另一台电脑进行操作,可以方便在家操作公司电脑.但是到了这个新公司却出现了一个问题,提示客户端无法建立跟远程计算机的连接,我的天,要命了. 远程桌面无法连接错误提示 仔细一看说 ...

  8. Windows远程桌面(mstsc)不能复制粘贴的解决办法

    原来通过mstsc远程连接Windows能够直接在本地和服务器之间复制.粘贴一些文字和文件,最近突然无法直接复制粘贴了,只能通过远程映射的本地磁盘方式交换文件,太为繁琐. 已经确认远程桌面连接选项“本 ...

  9. 远程桌面mstsc关闭连接栏

    在进行mstsc远程桌面连接电脑或者虚拟机的时候,总是会出现一个连接栏.虽然点左边的图钉可以自动隐藏,但是每次鼠标滑到上面的时候,还是会冒出来,这个就有点烦心了. 查了下资料,解决了这个问题. 关闭步 ...

  10. Windows下远程桌面的连接

    [系统环境] 建议Windows7以上 [步骤说明] 1.使用"WIN + R"组合键打开"运行"对话框,然后输入“mstsc”,点击确定,如下图所示: 2.点 ...

随机推荐

  1. centos jdk 配置及版本切换

    一. 环境变量: /etc/profile JAVA_HOME=/usr/lib/jdk1.8.0_91JRE_HOME=/usr/lib/jdk1.8.0_91/jreCLASS_PATH=.:$J ...

  2. Activiti工作流数据库表详细介绍

    Activiti的后台是有数据库的支持,所有的表都以ACT_开头. 第二部分是表示表的用途的两个字母标识. 用途也和服务的API对应. ACT_RE_*: 'RE'表示repository. 这个前缀 ...

  3. Sql- Group By ,Where,having用法

    Group by,where,having 是数据库查询中最常用的几个关键字.在工作中,时常用到,前面遇到一个问题,一个查询中使用了where ,group by ,having及聚集函数时 ,执行顺 ...

  4. 实现一个simple 3层的神经网络

    1.基本概念 1.1softmax softmax函数:一句话概括:是logistic 函数的扩展,将一个p维的数值向量映射成为一个k维的概率值,且这k个值的和为1. 公式: 解释: 1.2 cros ...

  5. Entity Framework 自动生成代码 如何用继承

    分部类 用接口

  6. Virtual Networking

    How the virtual networks used by guests work Networking using libvirt is generally fairly simple, an ...

  7. [转] An Introduction to Mutual SSL Authentication

    1. Introduction Mutual SSL authentication or certificate based mutual authentication refers to two p ...

  8. 背水一战 Windows 10 (116) - 后台任务: 前台程序激活后台任务

    [源码下载] 背水一战 Windows 10 (116) - 后台任务: 前台程序激活后台任务 作者:webabcd 介绍背水一战 Windows 10 之 后台任务 前台程序激活后台任务 示例演示后 ...

  9. 从零开始单排学设计模式「简单工厂设计模式」黑铁 III

    阅读本文大概需要 2 分钟. 本篇是设计模式系列的第二篇,虽然之前也写过相应的文章,但是因为种种原因后来断掉了,而且发现之前写的内容也很渣,不够系统.所以现在打算重写,加上距离现在也有一段时间了,也算 ...

  10. 微信小程序我的界面

    前言 感谢! 承蒙关照~ 微信小程序我的界面 界面效果: 界面结构: 小程序代码: 我们先看me.json代码 { "navigationBarTitleText": " ...