公司的代码是可以在公网上访问到,但这些代码里用了部署在公司局域网的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. Luogu P1784 数独 [ 模板 ] / P1074 靶形数独 题解 [ 蓝 ] [ 深搜 ] [ 剪枝 ] [ 卡常 ]

    数独模板 , 靶形数独 卡了 2h ,再也不想写数独了. 普通数独 思路 显然是对每个格子进行枚举,类似八皇后的方法去做,朴素方法是由 \((1,1)\) 到 \((9,9)\) 遍历过去. 优化 我 ...

  2. Android应用禁止屏幕休眠的3种方法

    做android应用开发时,有时需要在应用前台运行时,禁止休眠,以下几种方法供参考. 方法一:持有wakelock 添加休眠锁,休眠锁必须成对出现. private wakelock mwakeloc ...

  3. Flink - [08] 状态一致性

    题记部分 一.什么是状态一致性   有状态的流处理,内部每个算子任务都可以有自己的状态.对于流处理器内部来说,所谓的状态一致性,其实就是我们所说的计算结果要保证准确.一条数据也不应该丢失,也不应该重复 ...

  4. Hadoop - [04] 分布式部署

    Zookeeper的分布式部署 >> Hadoop的分布式部署 一.集群规划 主机名 node01 node02 node03 JDK ○ ○ ○ Zookeeper ○ ○ ○ Name ...

  5. Linux 环境变量指北

    Linux 环境变量指北 一.终端:Login Shell 二.Systemd 的配置方式 三.图形界面 DM(Display Manager) 显示管理器 DE(Desktop Environmen ...

  6. Scala Set集合 元素唯一,无序

    package com.wyh.day01 /** * Set集合 * 唯一,无序 * * Set中大部分方法与List一致,但是不可以进行排序 */ object ScalaSet { def ma ...

  7. 数据挖掘 | 数据隐私(2) | 差分隐私 | 数据重构化攻击(Reconstruction Attacks)

    L2-Reconstruction Attacks 本节课的目的在于正式地讨论隐私,但是我们不讨论算法本身有多隐私,取而代之去讨论一个算法隐私性有多么的不可靠.并且聚焦于 Dinur 与 Nissim ...

  8. linux系统批量查找网站源码并替换字符,查找替换指定内容

    问题描述:维护中需要批量修改代码中某个字符,如果单个打开页面进行修改则效率过低,linux系统下借助grep命令快速查找替换 命令示例1: grep -rl '查找的内容' . | xargs sed ...

  9. Qt 设置QTableView表格列宽自动均分表格

    文章目录 Qt 设置QTableView表格列宽自动均分表格 前言 setSectionResizeMode 通过获取字体占的像素来设置 Qt 设置QTableView表格列宽自动均分表格 前言 最近 ...

  10. vue2 配置 mock.js 模拟后端数据

    安装 mockj 首先确保你有一个 vue 2 项目,如果没有,可以用 Vue CLI 创建一个: vue create vue-mock-demo 开始安装 Mock.js npm install ...