为了简单起见,我将向您推荐http://en.wikipedia.org/wiki/Berkeley_sockets以及那里的UDP服务器和客户端源代码。
我正在尝试使用UDP协议将数据包发送到linux VirtualMachine服务器程序。我的主机和VM都很好;发送的所有数据包都是双向接收的。但是我的服务器程序要么没有收到任何数据包,要么就是不打印。无论哪种方式,它都不会打印我从主机发送给它的任何数据包的确认或内容。
我没有另外一台PC,但是如果我在同一台计算机上播放它们并且Wireshark报告正在发送数据包,那么两个程序的通信都会很好。
我的问题分为三个部分:首先,我该如何解决这个问题。第二,为什么主机和虚拟机会互相接收ping消息,但是不能将这些消息传递给UDP系统两端的开放套接字?最后,您对此问题的形式或意图有什么建议吗?
编辑:我尝试使用NAT和桥接适配器网络设置运行我的VM。但是,我现在无法概念化这些设置与我的问题之间的关系。
答案 0 :(得分:3)
通过NAT网络,VM获取私有IP地址(通常为192.168.x.y),主机对传出数据包进行NAT转换,并将回复数据包转换回VM。在此模式下,所有通信必须由VM启动 - 外部计算机只能向VM发送数据包以回复VM发送给它们的数据包。在网络上,数据包看起来像是来自某个不相关端口的主机。
通过桥接网络,VM可以获得直接连接到主机网络设备的设备。在此模式下,VM在与主机相同的网络LAN上显示为单独的计算机,具有自己的IP地址。您需要为其分配IP地址,与主机分配IP地址(通常通过DHCP)相同。
在任何一种情况下,要调试正在进行的操作,请在主机上使用tcpdump / wireshark来监控主机的网络设备。从VM发送数据包,您应该在跟踪中看到它们 - 它们似乎来自主机和NAT情况下的不同端口,并且看起来来自VM的IP地址(和未更改的端口)桥接案例。
一旦你看到,你应该能够将数据包发送回VM,但在NAT情况下,它们必须来自原始数据包发送到的地址/端口。
已知VirtualBox桥接网络在wifi设备上无法正常工作的问题;通常,您只能使用有线网络的桥接网络。
答案 1 :(得分:0)
Oracles VB manual page清除设置中使用的所有术语。
我遇到了类似的问题,我的VB程序没有收到任何数据包,我通过设置“桥接网络”并通过使用Wireshark分析WLAN接口并使用来在程序中设置适当的源/目标IP地址来解决此问题。终端中的ifconfig(或ipconfig)。