VMware主机和来宾之间的Python UDP和TCP通信不工作
我正在使用VMWare workstation和Windows 7主机以及Ubuntu来宾。我正在尝试用UDP或TCP在两者之间进行通信,但都没有成功。我把我的虚拟机设置为桥接网络模式,这给了它自己的IP地址。我有最基本的TCP/UDP服务器和客户端代码,这些代码来自我测试过的任何在线示例站点,如果我在主机上同时运行它们,它们都可以正常工作。但是,当我在虚拟机上有客户机或服务器时,通信不会通过 为了尝试弄清楚发生了什么,我在主机上运行UDP服务器,在主机上运行Wireshark,并将其过滤为UDP;然后,我尝试从客户机上发送数据包,在wireshark中,我可以看到数据包正在通过,但服务器似乎不想接收它。有什么想法吗 UDP服务器:VMware主机和来宾之间的Python UDP和TCP通信不工作,python,sockets,udp,virtual-machine,Python,Sockets,Udp,Virtual Machine,我正在使用VMWare workstation和Windows 7主机以及Ubuntu来宾。我正在尝试用UDP或TCP在两者之间进行通信,但都没有成功。我把我的虚拟机设置为桥接网络模式,这给了它自己的IP地址。我有最基本的TCP/UDP服务器和客户端代码,这些代码来自我测试过的任何在线示例站点,如果我在主机上同时运行它们,它们都可以正常工作。但是,当我在虚拟机上有客户机或服务器时,通信不会通过 为了尝试弄清楚发生了什么,我在主机上运行UDP服务器,在主机上运行Wireshark,并将其过滤为UD
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协议=UDP
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)
看看这个:
server\u address=('127.0.0.1',10000)
。要么A.让nginx将该端口转发出去,要么B.将127.0.0.1
更改为0.0.0
,如果这不起作用,你就做错了什么。比你快30秒P您仍然得到一个upvote:PThanks,但当客户端在VM上时,它仍然不起作用。您是否将服务器更改为绑定(0.0.0.0,10000)?因为如果您只更改了从客户端运行它,那么您仍然会将包发送到192.168.100.37,而不是127.0.0.1是。我更新了代码。刚用post中的精确代码测试过,当服务器和客户端都在主机上时,它就可以工作了。但不是在VM.hmm wierd上使用客户机,而是通过以下方式尝试ubuntu(主机)->ubuntu(主机)ubuntu(主机)->centos(来宾)centos(来宾)->centos(来宾)