arm开发板使用socket与虚拟机连接不上

   在开发板上使用Qt进行Socket编程时,以主机的虚拟机为服务器,开发板作为客户端进行通信。服务器端和客户端全部写完后,在虚拟机上运行时可以连接上,但是使用交叉编译以后,移植到开发板上后,发现连接不上了。而且双方ping是通的。然后使用主机作为客户端新写一个socket去连接虚拟机的服务器,也可以连上。

   也就是说,虚拟机作为服务器,虚拟机作为客户端可以连;虚拟机作为服务器,主机作为客户端也可以连;就是开发版不能使用socket连接虚拟机或者主机,并且都可以相互ping通。

   其实问题的原因也很简单,ping命令使用的是ICMP协议,而socket使用的是TCP协议,验证两台机器之间能否使用TCP协议通信也很简单,telnet就是使用的TCP协议,在开发板上使用telnet命令去连接虚拟机,发现果然连接不上,因此需要将虚拟机上的telnet服务开启,我使用的是redhat虚拟机,需要先安装telnet服务,安装命令如下:

    yum install telnet-server -y

   这条命令需要运行在root模式下。

然后修改配置文件 /etc/xinetd.d/telnet , 将disable=yes改为 disable=no, 如下所示:

service telnet
{
    flags           = REUSE
    socket_type     = stream
    wait            = no
    user            = root
    server          = /usr/sbin/in.telnetd
    log_on_failure  += USERID
    disable         = no
}

然后重启服务,命令是:

    /etc/init.d/xinetd restart

这里写图片描述

出现上面图说明重启成功,然后在开发板上使用命令:

    telnet 虚拟机IP 23

发现并不能登录,出现以下错误:

这里写图片描述

解决方法很简单,在虚拟加上执行命令:

    iptables -F

然后再使用telnet连接,发现可以连接上了。然后再使用自己写的socket程序测试socket连接,果然可以连上了。

你可能感兴趣的:(问题)