(网络编程)内网主机与公网主机的通讯
公网上有一台主机,需要定时地向内网中一台主机发送一个请求,内网主机则返回应答。内网主机能上网,但没有公网IP,所以公网主机无法直接向内网主机发送请求。已经明确没有权限设置内网网关主机,但内网这台主机和公网主机都可以设置或编程。为了形象,这样描述服务过程:
1、公网主机向内网主机询问:我需要某某数据,你有吗?(问题就在这个步骤,公网主机无法直接联系内网主机,也无法通过修改网关路由来解决)
2、内网主机说:我有,请接收数据。
3、公网主机接收数据。
为了解决公网主机无法直接联系内网主机的问题,我初步想法是把公网主机作为服务端,把内网主机作为客户端,由内网主机主动联系公网主机:
1、内网主机向公网主机询问:你需要数据吗?
2、公网主机说:我需要某某数据,你有吗?
3、内网主机说:我有,请接收数据。
4、公网主机接收数据。
但公网主机现在的软件已经开发好在运行,如果修改工作量大。如果要像前面的方式来解决,有什么思路?
[解决办法]
公网主机为什么无法连接内网呢?应该是可以的
虽然内网主要没有公网IP,但是,如果与公网主要有连接,在一个网段,那就可以直接通过IP访问
如果没有在一个网段,那也没关系,你现在与CSDN的主机就没有在一个网段,你觉得CSDN不能直接访问你呢
或是拿QQ来说吧,QQ不也是传数据给你了?
因为建立SOCKET连接之后,从客户端发出一个连接,服务端接收后,他会懂得如何到达客户端的,路由的过程,有点复杂,但是,简单来说,服务器端的东西,可以到达客户端的网段,然后,再找到那个与他相连的客户机
[解决办法]
可以在服务端外挂个服务或者其他方式,减少对原有功能的改动
另外,以我的网络理解,能够访问公网,那么这台设备必然会有一个公网地址才对......
[解决办法]
如果公网的主机有内网的IP的话,你可以连接公网主机在内网的IP。前提是你的公网主机能接受两个IP发过来的数据。一般来说没什么限制。当你设定socket设定监听端口时,绑定地址的属性设定为INADDR_ANY。就可以监听本机两个网卡上的数据。
[解决办法]
内外网间有防火墙,防火墙一般是拒绝外网主机主动访问内网,可以建立一个服务器进行用户中转