简单介绍下现在做的项目,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、我写的程序不是很稳定,经常断掉。有没有专门的软件来实现内网,外网的数据转发的。
谢谢大家了

解决方案 »

  1.   

    连接断开?用的tcp么?这个用udp吧
      

  2.   

    8楼:我用的是TCP,为什么要用UDP?
    还有其他人说在路由上做端口映射,条件不允许的。外网跟内网是不直接相连的。
    只能内网直接去连外网。
      

  3.   

    这种问题是不应该用程序来解决的。
    最好是在web服务器多装一个网卡连接内网,
    或者用多一台机器装2个网卡,一个连接内网,一个连接外网,并在这台机上建VPN,web服务器用VPN连接这台机,以此来访问内网。
      

  4.   

    tcp 长连接,要使用心跳包来维持连接。。
      

  5.   

    简单问题复杂化了,为什么不能直接连接oracle, 想办法做安全点就可以了,没有100%的安全