首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Windows主机无法从WSL-2来宾接收UDP数据包。

Windows主机无法从WSL-2来宾接收UDP数据包。
EN

Stack Overflow用户
提问于 2022-08-07 03:37:10
回答 1查看 685关注 0票数 1

我试图让一个简单的UDP回显客户机/服务器彼此通信。客户端程序(在主机Windows中运行)向服务器(在WSL-2中运行)发送数据包,服务器接收它们,但是服务器的答复永远不会到达客户端。

代码语言:javascript
运行
复制
import sys
from socket import *
from select import select

client = sys.argv[1].startswith("c")
host = sys.argv[2] if len(sys.argv) > 2 else "127.0.0.1"
port = 8080
sd = socket(AF_INET, SOCK_DGRAM)

def poll():
    readable, writable, errorset = select([sd], [sd], [sd], 0)
    return sd in readable

if client:
    sd.connect((host, port))
    sd.setblocking(0)
    sd.send(b"Hello!")
    while not poll():
        pass
    data, addr = sd.recvfrom(65535)
    print(f"RECV {addr} => {data}")

else:
    sd.bind((host, port))
    print(f"Listening on {host}:{port}")
    sd.setblocking(0)
    sd.setsockopt(SOL_SOCKET, SO_REUSEADDR, 1)

    while True:
        while poll():
            data, addr = sd.recvfrom(65535)
            print(f"RECV {addr} => {data}")
            sd.sendto(data.decode("utf-8").upper().encode("utf-8"), addr)

Windows上的输出:

代码语言:javascript
运行
复制
udpecho.py client 172.25.154.133

Linux上的输出:

代码语言:javascript
运行
复制
$ python3 udpecho.py server 172.25.154.133
Listening on 172.25.154.133:8080
RECV ('172.25.144.1', 57661) => b'Hello!'

现在我很困惑。TCP连接工作正常,所以它只能是UDP的事情,但我不知道下一步该尝试什么。

运行Windows 10家庭版并在WSL 2中托管Ubuntu20.04。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-08-08 20:35:58

这听起来像这个吉特布问题,其中UDP数据包小于12字节并不能从WSL2到主机Windows接口。

如果是这样,则报告的解决方法是通过以下方式关闭WSL2中的传输校验和:

代码语言:javascript
运行
复制
ethtool -K eth0 tx off

听起来这可能是一个超V网络问题,可以在WSL2之外复制,微软团队表示正在调查中。

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

https://stackoverflow.com/questions/73264714

复制
相关文章

相似问题

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