gpt4 book ai didi

virtual-machine - 我们如何将端口转发到 QEMU,而 QEMU 的端口上已经有一个服务器在运行?

转载 作者:行者123 更新时间:2023-12-05 09:05:11 26 4
gpt4 key购买 nike

我有一个运行在 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 通信,反之亦然

最佳答案

hostfwd 选项用于将连接从外部世界转发到运行在guest 上的服务器。 “hostfwd=tcp::HOSTPORT-:GUESTPORT”说“QEMU 应该监听主机的 HOSTPORT 端口;每当连接到达那里时,它应该将它转发到访客的端口 GUESTPORT(希望那里有服务器监听)”。

您似乎在主机 上运行服务器。在一台机器上的特定端口上监听的东西不能超过一件事,因此 python3 服务器程序可以监听端口 28009 并响应那里的连接,或者 QEMU 可以监听端口 28009 以响应那里的连接(转发它们给客人),但不能同时。无论哪个第二启动都会提示某些东西已经在使用该端口。

如果你想在主机上运行一个服务器并从 guest 连接到它,你根本不需要任何 QEMU 选项。 QEMU 的“用户模式”网络将允许访客程序向外连接到任何 IP 地址(包括更广泛的互联网,但也可以直接连接到主机),因此如果您尝试在访客上运行客户端并在主机上运行服务器,那么应​​该只是工作。您可以告诉 guest 客户端连接到主机的真实 IP 地址,或者您可以使用特殊的“网关”IP 地址 10.0.2.2,这就是主机在 guest 看到的假网络上的显示方式。

关于virtual-machine - 我们如何将端口转发到 QEMU,而 QEMU 的端口上已经有一个服务器在运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67518330/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com