两台服务器 a(ip 也用a) ,b(ip b) 
a b 是局域网
a上是数据库 但不允许其它外网访问 只能局域网b可以直接访问
所以我在 b 上创建了一个odbc  数据源 指向 a数据库想问 我在外网怎么访问到 b上创建的数据源??

解决方案 »

  1.   

    b上提供一个web接口,给外网调用,然后通过这个web接口来访问数据库。话说把数据库发布到外网上就是自杀行为啊,会翘辫子的。
      

  2.   

    我不是web 项目你说的web接口怎么弄..
      

  3.   

    通过在b上放一个代理服务器。。将接口部署在b上。。使接口用b的数据源和a的数据库交互然后外网通过调用代理服务器上的接口来实现功能
      

  4.   

    1、在b上编写JDBC-ODBC访问a上的数据库
    2、利用java socket,编写代码访问(1)
    3、公司的防火墙开放(2)中打开的端口
      

  5.   

    请问socket 的思路是怎么的...
      

  6.   


    第二点不是很赞同.
    在b上访问(1)不需要。。都是内部局域网访问数据库。。不需要socket那么复杂。。直接通过ip和端口就行了。。在(2)即b中开一个socket部署好接口服务。。然后开放(2)中的socket服务的端口,外网通过socket客户端访问b上的socket服务并调用相应的接口关于socket的东西。。LZ还是去搜些资料看看吧。。光在这里说是说不清楚的。。具体的思路已经说了。。
      

  7.   

    开发原理:   服务器,使用ServerSocket监听指定的端口,端口可以随意指定(由于1024以下的端口通常属于保留端口,在一些操作系统中不可以随意使用,所以建议使用大于1024的端口),等待客户连接请求,客户连接后,会话产生;在完成会话后,关闭连接。   客户端,使用Socket对网络上某一个服务器的某一个端口发出连接请求,一旦连接成功,打开会话;会话完成后,关闭Socket。客户端不需要指定打开的端口,通常临时的、动态的分配一个1024以上的端口。   Socket接口是TCP/IP网络的API,Socket接口定义了许多函数或例程,程序员可以用它们来开发TCP/IP网络上的应用程序。要学Internet上的TCP/IP网络编程,必须理解Socket接口。 Socket接口设计者最先是将接口放在Unix操作系统里面的。如果了解Unix系统的输入和输出的话,就很容易了解Socket了。网络的Socket数据传输是一种特殊的I/O,Socket也是一种文件描述符。Socket也具有一个类似于打开文件的函数调用Socket(),该函数返回一个整型的Socket描述符,随后的连接建立、数据传输等操作都是通过该Socket实现的。
      

  8.   

    scoket 不是PHP么?<? 
    // 设置一些基本的变量 
    $host = "192.168.1.99"; 
    $port = 1234; 
    // 设置超时时间 
    set_time_limit(0); 
    // 创建一个Socket 
    $socket = socket_create(AF_INET, SOCK_STREAM, 0) or die("Could not create 
    socket\n"); 
    //绑定Socket到端口 
    $result = socket_bind($socket, $host, $port) or die("Could not bind to 
    socket\n"); 
    // 开始监听链接 
    $result = socket_listen($socket, 3) or die("Could not set up socket 
    listener\n"); 
    // accept incoming connections 
    // 另一个Socket来处理通信 
    $spawn = socket_accept($socket) or die("Could not accept incoming 
    connection\n"); 
    // 获得客户端的输入 
    $input = socket_read($spawn, 1024) or die("Could not read input\n"); 
    // 清空输入字符串 
    $input = trim($input); 
    //处理客户端输入并返回结果 
    $output = strrev($input) . "\n"; 
    socket_write($spawn, $output, strlen ($output)) or die("Could not write 
    output\n"); 
    // 关闭sockets 
    socket_close($spawn); 
    socket_close($socket); 
    ?> 
    [/code]
      

  9.   


    <? 
    // 设置一些基本的变量 
    $host = "192.168.1.99"; 
    $port = 1234; 
    // 设置超时时间 
    set_time_limit(0); 
    // 创建一个Socket 
    $socket = socket_create(AF_INET, SOCK_STREAM, 0) or die("Could not create 
    socket\n"); 
    //绑定Socket到端口 
    $result = socket_bind($socket, $host, $port) or die("Could not bind to 
    socket\n"); 
    // 开始监听链接 
    $result = socket_listen($socket, 3) or die("Could not set up socket 
    listener\n"); 
    // accept incoming connections 
    // 另一个Socket来处理通信 
    $spawn = socket_accept($socket) or die("Could not accept incoming 
    connection\n"); 
    // 获得客户端的输入 
    $input = socket_read($spawn, 1024) or die("Could not read input\n"); 
    // 清空输入字符串 
    $input = trim($input); 
    //处理客户端输入并返回结果 
    $output = strrev($input) . "\n"; 
    socket_write($spawn, $output, strlen ($output)) or die("Could not write 
    output\n"); 
    // 关闭sockets 
    socket_close($spawn); 
    socket_close($socket); 
    ?> 
      

  10.   

    为什么样这样弄了?从外网访问b,b再去访问a,可不可以直接把a的访问权直接授权给外网。如果业务需要,就上ls说的,通过接口了,在b上运行我们的接口程序,调用数据源给外网服务(webservice、EJB都可以实现)。
      

  11.   


    像银行程序一样。。提高安全性所以放在内网。。外网通过VPN或者其他方式去访问内网。。估计还是要使用b代理发布接口。。