【发布时间】:2016-01-11 15:22:09
【问题描述】:
我正在使用带有 Windows 7 主机和 Ubuntu 来宾的 VMWare 工作站。我正在尝试使用 UDP 或 TCP 在两者之间进行通信——两者都没有成功。我将我的虚拟机设置为桥接网络模式,它为其提供了自己的 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
【问题讨论】:
-
看看这个:
server_address = ('127.0.0.1', 10000)它不应该是那样的。要么 A. 让 nginx 将该端口转发出去,要么 B. 将127.0.0.1更改为0.0.0.0,如果这不起作用,那么你做错了。
标签: python sockets udp virtual-machine