我在端口28009
上运行了一个python服务器。
python3 -m http.server 28009
现在,当我调用QEMU转发端口28009
时运行服务器之后:-
qemu-system-aarch64 -nographic -machine virt,gic-version=max -m 512M -cpu max -smp 4 \
-netdev user,id=vnet,hostfwd=tcp::28009-:28009 -device virtio-net-pci,netdev=vnet \
-drive file=ubuntu-image.img,if=none,id=drive0,cache=writeback -device virtio-blk,drive=drive0,bootindex=0 \
-drive file=flash0.img,format=raw,if=pflash -drive file=flash1.img,format=raw,if=pflash
它抛出一个错误,上面写着:-
qemu-system-aarch64: Could not set up host forwarding rule 'tcp::28009-:28009'
类似地,如果我首先运行上述QEMU脚本-它启动,好的。但是,python服务器现在抛出一个错误:
Traceback (most recent call last):
File "/usr/lib/python3.6/runpy.py", line 193, in _run_module_as_main
"__main__", mod_spec)
File "/usr/lib/python3.6/runpy.py", line 85, in _run_code
exec(code, run_globals)
File "/usr/lib/python3.6/http/server.py", line 1211, in <module>
test(HandlerClass=handler_class, port=args.port, bind=args.bind)
File "/usr/lib/python3.6/http/server.py", line 1185, in test
with ServerClass(server_address, HandlerClass) as httpd:
File "/usr/lib/python3.6/socketserver.py", line 456, in __init__
self.server_bind()
File "/usr/lib/python3.6/http/server.py", line 136, in server_bind
socketserver.TCPServer.server_bind(self)
File "/usr/lib/python3.6/socketserver.py", line 470, in server_bind
self.socket.bind(self.server_address)
OSError: [Errno 98] Address already in use
如何让服务器运行,然后QEMU能够访问该服务器?我不能使用TUN连接,因为我需要主机的本地主机与QEMU对话,反之亦然。
发布于 2021-05-13 13:29:27
hostfwd选项用于将连接从外部世界转发到在客户上运行的服务器。"hostfwd=tcp::HOSTPORT-: GUESTPORT“说:"QEMU应该监听端口HOSTPORT上的主机;当连接到达那里时,它应该将它转发到来宾的端口GUESTPORT(希望有一个服务器在那里监听)”。
你好像在主机上运行服务器。在一台计算机上的特定端口上只能监听一件事情,所以python3服务器程序可以在端口28009上侦听并响应那里的连接,或者QEMU可以在端口28009上侦听连接(将它们转发给来宾),但不能同时监听两者。不管是哪一个开始,第二个都会抱怨某些东西已经在使用端口了。
如果希望在主机上运行服务器并从来宾连接到服务器,则根本不需要任何QEMU选项。QEMU的“用户模式”网络将允许来宾程序向外连接到任何IP地址(包括更广泛的internet,但也可以直接连接到主机),因此,如果您试图在客户端运行客户端,在主机上运行服务器,则只需运行即可。您可以告诉客户端连接到主机的真实IP地址,也可以使用特殊的“网关”IP地址10.0.2.2,这是主机在客人看到的假网络上显示的方式。
https://stackoverflow.com/questions/67518330
复制相似问题