简单介绍下现在做的项目,1个web服务(外网),oracle数据库(内网)。
为了安全外网的机器只装了一块网卡,不能直接连接内网的oracle。
要求是外网的web需要取得内网的oracle数据。
1、我现在的解决方案是:写了个server应用放外网,写了个client应用放内网。
在server某个端口做监听,client主动连接server,server收到web的数据后转发
给client,client取得数据后转给server,server再转给web。测试已经通过了。
2个应用在web,oracle之间做了个数据转发。2个应用从连接到转发数据一直是连着的,
除非连接断开后程序开始重新连接。现在的情况是2个应用之间经常断开,我写了个方法
去实时监测连接是否断开。做了个时钟每秒取监测一次,断开了再重新连接。以下是监测方法。
可是断开后监测的结果还是打印出a,返回true,我现在不知道是何种情况下导致连接断开的。
不知道该监测方法是否正确。
private bool IsConnected()
{
if (m_LANSocket == null) return false; bool blockingState = m_LANSocket.Blocking;
try
{
byte[] tmp = new byte[1];
m_LANSocket.Blocking = false;
m_LANSocket.Send(tmp, 0, 0);
log.Info("a");
return true;
}
catch (SocketException e)
{
// 10035 == WSAEWOULDBLOCK
if (e.NativeErrorCode.Equals(10035))
{
log.Info("b");
return true;
}
else
{ log.Info("c");
return false;
}
}
finally
{
m_LANSocket.Blocking = blockingState;
}
}
2、我写的程序不是很稳定,经常断掉。有没有专门的软件来实现内网,外网的数据转发的。
谢谢大家了
为了安全外网的机器只装了一块网卡,不能直接连接内网的oracle。
要求是外网的web需要取得内网的oracle数据。
1、我现在的解决方案是:写了个server应用放外网,写了个client应用放内网。
在server某个端口做监听,client主动连接server,server收到web的数据后转发
给client,client取得数据后转给server,server再转给web。测试已经通过了。
2个应用在web,oracle之间做了个数据转发。2个应用从连接到转发数据一直是连着的,
除非连接断开后程序开始重新连接。现在的情况是2个应用之间经常断开,我写了个方法
去实时监测连接是否断开。做了个时钟每秒取监测一次,断开了再重新连接。以下是监测方法。
可是断开后监测的结果还是打印出a,返回true,我现在不知道是何种情况下导致连接断开的。
不知道该监测方法是否正确。
private bool IsConnected()
{
if (m_LANSocket == null) return false; bool blockingState = m_LANSocket.Blocking;
try
{
byte[] tmp = new byte[1];
m_LANSocket.Blocking = false;
m_LANSocket.Send(tmp, 0, 0);
log.Info("a");
return true;
}
catch (SocketException e)
{
// 10035 == WSAEWOULDBLOCK
if (e.NativeErrorCode.Equals(10035))
{
log.Info("b");
return true;
}
else
{ log.Info("c");
return false;
}
}
finally
{
m_LANSocket.Blocking = blockingState;
}
}
2、我写的程序不是很稳定,经常断掉。有没有专门的软件来实现内网,外网的数据转发的。
谢谢大家了
还有其他人说在路由上做端口映射,条件不允许的。外网跟内网是不直接相连的。
只能内网直接去连外网。
最好是在web服务器多装一个网卡连接内网,
或者用多一台机器装2个网卡,一个连接内网,一个连接外网,并在这台机上建VPN,web服务器用VPN连接这台机,以此来访问内网。