首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >我们如何将一个端口转发到已经运行了端口上的服务器的QEMU?

我们如何将一个端口转发到已经运行了端口上的服务器的QEMU?
EN

Stack Overflow用户
提问于 2021-05-13 11:18:52
回答 1查看 4.8K关注 0票数 1

我在端口28009上运行了一个python服务器。

代码语言:javascript
运行
复制
python3 -m http.server 28009

现在,当我调用QEMU转发端口28009时运行服务器之后:-

代码语言:javascript
运行
复制
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 

它抛出一个错误,上面写着:-

代码语言:javascript
运行
复制
qemu-system-aarch64: Could not set up host forwarding rule 'tcp::28009-:28009'

类似地,如果我首先运行上述QEMU脚本-它启动,好的。但是,python服务器现在抛出一个错误:

代码语言:javascript
运行
复制
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对话,反之亦然。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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,这是主机在客人看到的假网络上显示的方式。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67518330

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档