公司的代码是可以在公网上访问到,但这些代码里用了部署在公司局域网的api。如果有时想在家写代码看看这个wpf软件的运行情况,就运行不起来,因为主要业务都得连接公司局域网的api接口。我就想用自己的阿里云服务器搭建一个代理,来访问公司的局域网。最终实现情况,在家里做了测试,家里一台台式,一台笔记本,2个路由器,一个电信的光纤入口网关。那我把台式和笔记本分别连接不同的局域网,无法再台式上ping通笔记本的网络。在台式上访问部署在云服务器上的中转服务,成功的访问到了笔记本上部署的api了。这样把笔记本环境换成公司环境,也应该是能够成功访问到公司的局域网api的。
 
  具体的步骤是这样的:
  1、在访问端A(我的台式,台式ip:192.168.31.11),部署一个监听端口比如7088的本地socket服务端,把api的访问地址就改成:Http://192.168.31.11:7088/swagger/index.html;本来这个api的地址可能是公司内网的地址比如:192.168.2.14:8088。我们改了是为了能把请求打到我们部署在本地A的socket上。部署好这个本地socket服务端,先测试一下请求,发现可以把浏览器的http请求打印到控制台,这一步就完成了。
  
  2、部署到云服务的中转代理服务器ProxyServer。也是socket写的。主要作用是把A客户端的请求,发送到部署到公司的ClientB,并把clientB的api的Response返回给ClientA,也就是起到本地A端和公司局域网B端的Http请求和返回的中转的作用,另外在这个ProxyServer里还有一个接收B客户端的心跳的SocketClient。这个中转服务监听的端口需要在阿里云服务器的规则里放行,不然访问不了。
 
  3、部署在公司的ClientB,这个ClientB主要是包含三个socket Client,一个连接中转服务器的Socket客户端,用于接收clientA发向中转服务器,再由中转服务器发送过来的请求;一个是连接公司局域网的api的端口,用于访问最终的公司局域网的api接口;一个是心Socket跳客户端,用于公司断网后,等网络恢复了,能重新连接到中转服务器。
  
  4、 最终先要启动中转服务器,再启动ClientB。
  总的来讲,就是本地A端连接ProxyServer,公司ClientB端也连接ProxyServer,ClientB端再连接部署在公司局域网的api的端口,然后,本地A端发往B端的请求,先要打到ClientA上,再由ClientA发送给ProxyServer,通过ProxyServer转发给ClientB,最后由ClientB发往真正的api的端口,然后依次返回接收Response,最终呈现给A端。访问swagger首页,就可以在浏览器上看到swagger的首页,并且在swagger上请求post, 也是可以收到返回的内容的。
  
  代码写的简陋,无法处理复杂逻辑,断网重连后,还需要重启本地的ClientA,才能继续访问到公司局域网的api。通过这次实践,我踩的坑主要是:
  1、判断post和get请求是否是一个完整请求体的方法不一样,get请求,直接\r\n\r\n就可以,但是psot请求,必须获取postData的长度,所以最终通过deepseek给出的方法,就解决了这个问题。
  2、必须一个request,一个response一一对应。我就遇到了A请求发完,B请求继续发,但A请求收到了长度是0的返回内容,那后续B的请求就收不到返回,页面就卡死了,无法继续后面的请求。所以ClientA 发给ProxyServer,ProxyServer发给ClientB的,以及从ClientB返回ProxyServer,ProxyServer返回到ClientA。都是同步的。
  3、一次请求就必须新建一个Client连接到ProxyServer,但连接到ProxyServer的ClientB只能是一个。
  4、必须判断返回的Response,是否全部读取完毕,我是把每次循环读取的Resposne拼接成字符串,等到这个字符串以"0\r\n\r\n"结尾,我就认为该Respose已经全部返回完毕。目前这样判断是没问题的。
  5、在ClientB中,要把请求体的Host更改为实际api的ip和端口号,不然,无法访问到api。通过deepseek给出的请求体的host转换代码也是能用的。

Socket实践:使用云服务器当代理连接公司内网,简单实现跨局域网调用部署在公司局域网里的api接口的更多相关文章

  1. 华为云服务器搭建FTP后,内网访问无法连接。

    总结:1.内网访问公网需要用被动模式 2.云服务器需要放开除20.21以外的部分端口,指定范围 3.PASV IP配置为云服务器的弹性公网IP 4.局域网使用主动模式连接FTP,客户端需要关闭防火墙, ...

  2. SSH通过SSH代理连接到内网机器

    要解决的问题? 需要解决的问题:https://q.cnblogs.com/q/105319/ 简单来说就是本地机器通过一台公网机器SSH到公网机器后面的私网机器. 网络环境如下图:本地机器可访问代理 ...

  3. 阿里云服务器Svn-Server无法连接

    总结:关于阿里云服务器Svn-Server无法连接,Svn-Server的配置问题 2018年07月09日 11:51:08 周同学的博客 阅读数:355   最近在使用阿里云服务器时,SQL SER ...

  4. OpenWRT DNS无法解析WAN连接的内网服务器域名

    系统版本OpenWrt Chaos Calmer 15.05.1,网络连接为:WAN口连接内网10.x.x.x网段,WAN口设置为静态IP.设置L2TP接口,通过L2TP访问外网.问题出现于,所有外网 ...

  5. 把www.domain.com均衡到本机不同的端口 反向代理 隐藏端口 Nginx做非80端口转发 搭建nginx反向代理用做内网域名转发 location 规则

    负载均衡-Nginx中文文档 http://www.nginx.cn/doc/example/loadbanlance.html 负载均衡 一个简单的负载均衡的示例,把www.domain.com均衡 ...

  6. 端口被占用通过域名的处理 把www.domain.com均衡到本机不同的端口 反向代理 隐藏端口 Nginx做非80端口转发 搭建nginx反向代理用做内网域名转发 location 规则

    负载均衡-Nginx中文文档 http://www.nginx.cn/doc/example/loadbanlance.html 负载均衡 一个简单的负载均衡的示例,把www.domain.com均衡 ...

  7. 搭建nginx反向代理用做内网域名转发

    先上一个我的正常使用的配置 location / { proxy_pass http://192.168.1.84:80; proxy_redirect off; proxy_set_header H ...

  8. 没固定公网 IP 的公司内网实现动态域名解析( 阿里云万网解析 )

    情景说明 前段时间应公司需求,需要将内网的服务映射到公网.由于公司使用的是类似家庭宽带的线路,没有固定的公网 IP 地址,所以决定使用域名来完成. 当时有几种方案: 1.花生壳:但是目前需要乱七八糟的 ...

  9. 通过SOCKS代理渗透整个内网

    https://blog.csdn.net/SouthWind0/article/details/83111044 通过SOCKS代理渗透整个内网 1.背景 经过前期的渗透工作,我们现在已经成功找到了 ...

  10. IPsecVPN:阿里云VPN网关和深信服防火墙打通公有云和公司内网

    简介 目前许多公司网络环境为混合云(私有云,IDC,公司内网融合)的状态,通过内网ip的访问使得工作更加方便,需求也更为迫切,而本文介绍的即是实现私有云和公司内网互通的一种方法,希望对有此需求的小伙伴 ...

随机推荐

  1. 4.vue Router路由设置

    router=>index.js 设置路由信息 1.路由文件按分组拆分多个 import analysisRouter from './analysisRouter'; import users ...

  2. axurerp9怎么汉化:Axure RP9 中文激活安装教程

    Axure RP 9是一款一款专业级快速产品原型设计工具,使用它可以让用户快速.高效创建应用软件或Web网站的线框图.流程图.原型和规格说明文档.采用了极简主义的设计,界面布局更加清爽简洁,操作也非常 ...

  3. AI图像翻译

    在当今互联互通的世界中,快速准确地翻译图像中的文本的能力非常宝贵.无论您是商务人士.教育工作者.设计师还是内容创作者,Visual Paradigm Online 的 AI 图像翻译器都能提供强大的解 ...

  4. 火爆的 幻兽帕鲁/Palworld 单机➕联机 电脑游戏 免费畅游

    在广阔的世界中收集神奇的生物"帕鲁",派他们进行战斗.建造.做农活,工业生产等,这是一款支持多人游戏模式的全新开放世界生存制作游戏. ▼补丁主要内容 ・修复加载世界数据时,加载画面 ...

  5. Linux - 开启FTP服务

    vsftpd 一.Centos6.x配置ftp 1.1.安装OpenSSH-server OpenSSH-server包含了FTP服务,通常,CentOS6.x默认已经安装了OpenSSH-serve ...

  6. C# async/await使用举例

    1.async/await几点总结 a.被async标记的方法,返回值类型只能为void.Task.Task<T>. b.被async标记的方法,内部可以有await修饰符,表明内部逻辑某 ...

  7. go语言实现终端里的倒计时

    最近在更新系统的时候发现pacman的命令行界面变了,我有很久没更新过设备上的Linux系统了,所以啥时候变的不好说.但这一变化成功勾起了我的好奇心.新版的更新进度界面如下: 新的更新进度界面能同时显 ...

  8. FastAPI 自定义参数验证器完全指南:从基础到高级实战

    title: FastAPI 自定义参数验证器完全指南:从基础到高级实战 date: 2025/3/11 updated: 2025/3/11 author: cmdragon excerpt: 本教 ...

  9. k8s 报错: node(s) didn't match Pod's node affinity.

    前言 k8s集群中,有pod出现了 Affinity ,使用 kubectl describe pod 命令,发现了报错 2 node(s) didn't match Pod's node affin ...

  10. Django实战项目-学习任务系统-查询列表分页显示

    接着上期代码框架,6个主要功能基本实现,剩下的就是细节点的完善优化了. 接着优化查询列表分页显示功能,有很多菜单功能都有查询列表显示页面情况,如果数据量多,不分页显示的话,页面展示效果就不太好. 本次 ...