VMware主机和guest虚拟机之间的Python UDP和TCP通信无法正常工作

时间:2016-01-11 15:22:10

标签: python sockets udp virtual-machine

我正在使用带有Windows 7主机和Ubuntu guest虚拟机的VMWare工作站。我试图在两者之间用UDP或TCP进行通信 - 两者都没有成功。我将我的VM设置为Bridged网络模式,为其提供自己的IP地址。我有来自任何在线示例站点的最基本的TCP / UDP服务器和客户端代码,我已经测试并且工作正常如果我在主机上同时运行。但是,当我在VM上有客户端或服务器时,通信不会通过。

为了弄清楚发生了什么,我在主机上运行了UDP服务器并在主机上运行了Wireshark,并将其过滤为UDP;然后我尝试从客户端的客户端发送一个数据包,在wireshark中,我可以看到数据包正在通过,但服务器似乎不想接收它。有什么想法吗?

UDP服务器:

import socket
import sys

# Create a TCP/IP socket
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

# Bind the socket to the port
server_address = ('0.0.0.0', 10000)
print >>sys.stderr, 'starting up on %s port %s' % server_address
sock.bind(server_address)

while True:
    print >>sys.stderr, '\nwaiting to receive message'
    data, address = sock.recvfrom(4096)

    print >>sys.stderr, 'received %s bytes from %s' % (len(data), address)
    print >>sys.stderr, data

    if data:
        sent = sock.sendto(data, address)
        print >>sys.stderr, 'sent %s bytes back to %s' % (sent, address)

UDP客户端:

import socket
import sys

# Create a UDP socket
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

server_address = ('192.168.100.38', 10000)
message = 'This is the message.  It will be repeated.'

try:

    # Send data
    print >>sys.stderr, 'sending "%s"' % message
    sent = sock.sendto(message, server_address)

    # Receive response
    print >>sys.stderr, 'waiting to receive'
    data, server = sock.recvfrom(4096)
    print >>sys.stderr, 'received "%s"' % data

finally:
    print >>sys.stderr, 'closing socket'
    sock.close()

在wireshark中,我可以看到从VM客户端发送的数据包:

Src = 192.168.100.42 Dst = 192.168.100.38 Proto = UDP

1 个答案:

答案 0 :(得分:2)

server_address = ('127.0.0.1', 10000)
print >>sys.stderr, 'starting up on %s port %s' % server_address
sock.bind(server_address)

你告诉套接字侦听发往127.0.0.1:10000的数据包,但传入的数据包转到192.168.100.37:10000。尝试

bind(('0.0.0.0', 10000)