• 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

    运行效果图

     
    分类: C#
  • 相关阅读:
    JavaScript基础
    WordPress站点绑定多个域名
    linux下如何把php升级到5.6
    ansible shell 之运行后台程序
    Redhat7 开机启动服务
    模拟jenkins通过shell给ansible传入变量
    ansible-playbook权限提升多种方式
    ansible删除目录下所有内容
    ansible 文件和目录操作
    linux 用户和组管理
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/10414701.html
Copyright © 2020-2023  润新知