连接到Linux虚拟机上的数据库的SocketTimeoutException

时间:2013-03-18 22:07:52

标签: java linux virtual-machine

Oracle NoSQL是一个应该托管在Linux上的数据库,所以我在Oracle VM VirtualBox中运行了一个虚拟的Ubuntu。我的主机运行的是Windows 7。

我有一个桥接连接,我绝对能够在两者之间进行通信。在两台机器上运行数据库的情况下,我可以通过网络浏览器连接到另一台机器的管理控制台,该控制台在端口5001上运行。我可以使用我们网络上的机器的IP地址或其网络名称以这种方式连接。

从这两台机器上,我可以连接到该机器的数据库,并使用IP地址或网络名称从java程序中使用该数据库。

在虚拟机中,我可以使用网络名称连接并使用我的PC的kvstore,但是我使用IP地址获得了socketTimeoutException。我认为这是由于kvstore的限制。

从我的电脑上,我无法使用网络名称或IP地址连接并使用虚拟机的kvstore。当我尝试使用虚拟机的网络名称进行连接时,我得到以下stacktrace:

Exception in thread "main" oracle.kv.FaultException: Could not contact any RepNode at: [pc30129vm:5000] (11.2.2.0.26)
Fault class name: oracle.kv.KVStoreException
    at oracle.kv.KVStoreFactory.getStore(KVStoreFactory.java:123)
    at nosql.Test.main(Test.java:18)
Caused by: oracle.kv.KVStoreException: Could not contact any RepNode at: [pc30129vm:5000]
    at oracle.kv.impl.util.TopologyLocator.getInitialTopology(TopologyLocator.java:226)
    at oracle.kv.impl.util.TopologyLocator.get(TopologyLocator.java:85)
    at oracle.kv.impl.api.RequestDispatcherImpl.<init>(RequestDispatcherImpl.java:285)
    at oracle.kv.KVStoreFactory.getStore(KVStoreFactory.java:118)
    ... 1 more
Caused by: java.rmi.ConnectIOException: Exception creating connection to: pc30129vm; nested exception is: 
    java.net.SocketTimeoutException: connect timed out
    at sun.rmi.transport.tcp.TCPEndpoint.newSocket(TCPEndpoint.java:632)
    at sun.rmi.transport.tcp.TCPChannel.createConnection(TCPChannel.java:216)
    at sun.rmi.transport.tcp.TCPChannel.newConnection(TCPChannel.java:202)
    at sun.rmi.server.UnicastRef.newCall(UnicastRef.java:340)
    at sun.rmi.registry.RegistryImpl_Stub.list(Unknown Source)
    at oracle.kv.impl.util.TopologyLocator.getInitialTopology(TopologyLocator.java:175)
    ... 4 more
Caused by: java.net.SocketTimeoutException: connect timed out
    at java.net.DualStackPlainSocketImpl.waitForConnect(Native Method)
    at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:75)
    at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:339)
    at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:200)
    at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:182)
    at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:157)
    at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:391)
    at java.net.Socket.connect(Socket.java:579)
    at oracle.kv.impl.util.registry.ClientSocketFactory.createSocket(ClientSocketFactory.java:300)
    at sun.rmi.transport.tcp.TCPEndpoint.newSocket(TCPEndpoint.java:613)
    ... 9 more

我尝试在虚拟机上的那个端口上运行Nmap,这似乎很好。使用nmap命令:

nmap -p 5000 pc30129vm

我得到了结果:

Starting Nmap 6.25 ( http://nmap.org ) at 2013-03-18 14:51 Pacific Daylight Time

Nmap scan report for pc30129vm (192.168.0.25)

Host is up (0.0030s latency).

PORT     STATE    SERVICE

5000/tcp filtered upnp

MAC Address: 08:00:27:44:A1:10 (Cadmus Computer Systems)


Nmap done: 1 IP address (1 host up) scanned in 11.74 seconds

我无法弄清楚为什么我无法连接并使用虚拟机的数据库。有一个同事运行Linux的同事笔记本电脑,我甚至可以连接,但由于某种原因,虚拟机似乎阻碍了我的努力。

1 个答案:

答案 0 :(得分:1)

评论粘贴为答案:

您很可能有防火墙阻止您访问该端口。防火墙可以保护服务器并拒绝与它的传入连接,或者可能阻止来自您的计算机的传出连接 - 或者两者都是最坏的情况。

当您可以实际访问端口时,nmap会在STATE列中报告“打开”。