Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
VMware主机和来宾之间的Python UDP和TCP通信不工作_Python_Sockets_Udp_Virtual Machine - Fatal编程技术网

VMware主机和来宾之间的Python UDP和TCP通信不工作

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

我正在使用VMWare workstation和Windows 7主机以及Ubuntu来宾。我正在尝试用UDP或TCP在两者之间进行通信,但都没有成功。我把我的虚拟机设置为桥接网络模式,这给了它自己的IP地址。我有最基本的TCP/UDP服务器和客户端代码,这些代码来自我测试过的任何在线示例站点,如果我在主机上同时运行它们,它们都可以正常工作。但是,当我在虚拟机上有客户机或服务器时,通信不会通过

为了尝试弄清楚发生了什么,我在主机上运行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协议=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(来宾)