【问题标题】:How to connect through socket to Virtual Machine如何通过套接字连接到虚拟机
【发布时间】:2018-06-16 17:31:54
【问题描述】:

我有一个在 Windows 上的 java 客户端和在 Linux (VM) 上运行的 c++ 服务器。我正在尝试将客户端连接到服务器。但我不知道我应该使用什么 IP 地址。 我的虚拟机配置是默认的,我有 NAT 网络。 这是我从 ifconfig 中得到的信息

enp0s3    Link encap:Ethernet  HWaddr 08:00:27:97:86:ce 
      inet addr:10.0.2.15  Bcast:10.0.2.255  Mask:255.255.255.0
      inet6 addr: fe80::8651:2c9d:6683:e4fc/64 Scope:Link
      UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
      RX packets:855910 errors:0 dropped:0 overruns:0 frame:0
      TX packets:267095 errors:0 dropped:0 overruns:0 carrier:0
      collisions:0 txqueuelen:1000
      RX bytes:940974525 (940.9 MB)  TX bytes:24398399 (24.3 MB)

lo        Link encap:Local Loopback 
      inet addr:127.0.0.1  Mask:255.0.0.0
      inet6 addr: ::1/128 Scope:Host
      UP LOOPBACK RUNNING  MTU:65536  Metric:1
      RX packets:9710 errors:0 dropped:0 overruns:0 frame:0
      TX packets:9710 errors:0 dropped:0 overruns:0 carrier:0
      collisions:0 txqueuelen:1
      RX bytes:875898 (875.8 KB)  TX bytes:875898 (875.8 KB)

这是我从 ipconfig 得到的:

Ethernet adapter Ethernet:

   Media State . . . . . . . . . . . : Media disconnected
   Connection-specific DNS Suffix  . :

Wireless LAN adapter Połączenie lokalne* 2:

   Media State . . . . . . . . . . . : Media disconnected
   Connection-specific DNS Suffix  . :

Wireless LAN adapter Wi-Fi:

   Connection-specific DNS Suffix  . : home
   Link-local IPv6 Address . . . . . : fe80::ddca:c63d:1b9e:6255%14
   IPv4 Address. . . . . . . . . . . : 192.168.1.3
   Subnet Mask . . . . . . . . . . . : 255.255.255.0
   Default Gateway . . . . . . . . . : 192.168.1.254

Ethernet adapter Połączenie sieciowe Bluetooth:

   Media State . . . . . . . . . . . : Media disconnected
   Connection-specific DNS Suffix  . :

Tunnel adapter Połączenie lokalne* 4:

   Connection-specific DNS Suffix  . :
   IPv6 Address. . . . . . . . . . . : 2001:0:9d38:90d7:10c9:14d5:da7f:e55c
   Link-local IPv6 Address . . . . . : fe80::10c9:14d5:da7f:e55c%13
   Default Gateway . . . . . . . . . : ::

我尝试使用以下方式连接:

socket = new Socket("10.0.2.15", 1236);

当我在带有本地主机的 VM 上使用客户端时,一切都很好。

所以我认为 Windows 和 VM 之间的连接存在问题。

【问题讨论】:

    标签: sockets virtual-machine virtualbox


    【解决方案1】:

    你应该阅读https://blogs.oracle.com/scoter/networking-in-virtualbox-v2

    基本上,您必须配置端口转发。按照页面末尾链接中提供的说明进行操作。

    你应该使用的配置是:

    Name: Rule 1 (or any actually)
    Protocol: TCP
    Host IP: 127.0.0.1
    Host Port: 1236
    Guest IP: (leave blank)
    Guest Port: 1236
    

    访客端口可以是任何端口,但必须与您在服务器应用程序上使用的端口相同。将访客 IP 留空。

    现在,为了从主机连接到访客,您应该在客户端应用程序中使用:

    socket = new Socket("127.0.0.1", 1236);
    

    如果你想从客户虚拟机连接到主机,使用这个配置,你应该在客户端应用程序中使用:

    socket = new Socket("10.0.2.2", 1236);
    

    或者,您也可以在桥接模式下使用 NIC,文章中也对此进行了说明。但是你应该正确配置路由器。

    顺便说一句,不要忘记禁用防火墙或对其进行配置,否则它会阻止传入连接。 您可以使用以下命令禁用 ufw:

    sudo ufw disable
    

    【讨论】:

      猜你喜欢
      • 2021-02-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-13
      • 2019-09-25
      • 1970-01-01
      相关资源
      最近更新 更多