公司的代码是可以在公网上访问到,但这些代码里用了部署在公司局域网的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. docker镜像是上传与下载

    docker也有自己的镜像仓库,官方仓库网站是https://hub.docker.com/.   如果需要将自己的镜像上传至镜像仓库,首先需要在DockerHub创建账号,地址:https://hu ...

  2. 无分类有tag

    1 2

  3. 函数static的作用

    限制作用域和保持状态 ‌函数static的作用主要体现在限制作用域和保持状态两个方面.‌‌1 限制作用域 ‌静态全局变量‌:在全局变量前加上static关键字,该变量就被定义成为一个静态全局变量.这种 ...

  4. 什么是A型或者B型剩余电流保护器?

    我国的剩余电流保护装置(RCD)指导性标准GB/Z 6829-2008(IEC/TR 60755:2008,MOD)<剩余电流动作保护器的一般要求> 从产品的基本结构.剩余电流类型.脱扣方 ...

  5. 盘点10个.NetCore实用的开源框架项目

    连续分享.Net开源项目快3个月了,今天我们一起梳理下10个,比较受到大家欢迎的.NetCore开源框架项目. 更多开源项目,可以查看我创建的,.Net开源项目榜单! 一个专注收集.Net开源项目的榜 ...

  6. Docker - 部署IT运维管理平台CAT

    原文链接:https://mp.weixin.qq.com/s/Ld9OLnmHP1IAc0Ofo-RzeQ 一.CAT介绍(略) 二.环境规划(略) 三.检查环境(略) 四.部署cat镜像 1.下载 ...

  7. Cython与CUDA之Gather

    技术背景 Cython是Python的一个超集,可以使用Pythonic的语法写出接近于C语言的性能,可以用于将Python编程过程中遇到的Bottleneck模块改写成Cython以达到加速的效果. ...

  8. 【文献阅读】 PVDF &阻尼&有限元建模

    1. 压电Damper原理 Piezoelectric Composite Materials - ScienceDirect 当振动传递到压电材料时,振动能量通过压电效应转化为电能,产生交流电压.所 ...

  9. 【Matlab】判断点和多面体位置关系的两种方法实现

    分别是向量判别法(算法来自他人论文).体积判别法(code 是我从网上找的). 方法一: 向量判别法 方法来自一会议论文:<判断点与多面体空间位置关系的一个新算法_石露>2008年,知网. ...

  10. PHP配置并使用mosquitto

    要在PHP中配置和使用Mosquitto,你需要进行以下步骤: 安装Mosquitto PHP扩展: sudo apt-get install php-mosquitto 在PHP配置文件中启用Mos ...