You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

UDP通信IP与端口配置正确仍出现10049错误的排查问询

问题分析与解决

10049错误的根本原因

你绑定套接字时用了192.168.0.69,但这个IP是对方设备的地址,不是运行你代码的本机网卡IP。Winsock不允许绑定一个不属于本机的IP,所以抛出10049(WSAEADDRNOTAVAIL)错误。而Ezterm能正常工作,是因为它默认绑定了0.0.0.0(代表监听所有本机网卡接口),不管数据发往本机哪个IP,只要端口匹配就能收到。

修正方案

方案一:绑定本机实际IP

找到你本机在局域网的IP(比如192.168.0.xx),替换代码里的inet_addr("192.168.0.69")。

方案二:绑定所有接口(推荐)

用INADDR_ANY代替指定IP,这样套接字会监听本机所有可用的网卡接口,无需关心本机具体IP:

serverHint.sin_addr.S_un.S_addr = INADDR_ANY;

代码里的其他严重问题

你的while(true)循环存在资源泄漏:每次循环都重新初始化Winsock、创建套接字,却没有正确关闭套接字。正确的做法是把WSA初始化、套接字创建和绑定放在循环外,循环内只做接收操作,程序退出时再清理资源。

修正后的完整代码示例

DWORD WINAPI socketRead(void *lpVoid)
{
    // UDP socket
    WSADATA data_s;
    WORD version = MAKEWORD(2, 2);

    // socket start - 只初始化一次
    int wsok = WSAStartup(version, &data_s);
    if (wsok != 0)
    {
        cout << "Can't start Winsock!" << wsok;
        return 0;
    }
    cout << "start Winsock!\n";

    // 创建套接字 - 只创建一次
    SOCKET in = socket(AF_INET, SOCK_DGRAM, 0); 
    if (in == INVALID_SOCKET)
    {
        cout << "Can't create socket!" << WSAGetLastError() << endl;
        WSACleanup();
        return 0;
    }

    // socket bind - 只绑定一次
    SOCKADDR_IN serverHint = {};
    memset(&serverHint, 0, sizeof(serverHint));

    serverHint.sin_family = AF_INET; // IPv4 
    serverHint.sin_addr.S_un.S_addr = INADDR_ANY; // 监听所有接口
    serverHint.sin_port = htons(1480);                          

    if (bind(in, (sockaddr *)&serverHint, sizeof(serverHint)) != SOCKET_ERROR)
    {
        cout << "bind socket!\n";
    }
    else
    {
        cout << "can't bind socket!" << WSAGetLastError() << endl;
        closesocket(in);
        WSACleanup();
        return 0;
    }

    // 循环接收数据
    char buffer[1024];
    SOCKADDR_IN clientAddr;
    int clientAddrSize = sizeof(clientAddr);
    while (true)
    {
        int recvLen = recvfrom(in, buffer, sizeof(buffer)-1, 0, (sockaddr*)&clientAddr, &clientAddrSize);
        if (recvLen == SOCKET_ERROR)
        {
            cout << "Receive error!" << WSAGetLastError() << endl;
            continue;
        }
        buffer[recvLen] = '\0';
        // 可以判断发送方IP是否是192.168.0.69
        char clientIP[20];
        inet_ntop(AF_INET, &clientAddr.sin_addr, clientIP, sizeof(clientIP));
        if (strcmp(clientIP, "192.168.0.69") == 0)
        {
            cout << "Received from 192.168.0.69: " << buffer << endl;
        }
    }

    // 实际程序退出时执行以下清理(这里循环不会退出,仅作示例)
    closesocket(in);
    WSACleanup();
    return 0;
}

关于额外配置的说明

不需要额外配置系统,只要修正代码中的绑定IP问题即可。如果之后还是有问题,可以检查:

  • 本机防火墙是否允许1480端口的UDP入站连接
  • 1480端口是否被其他程序占用(可以用netstat -ano | findstr :1480命令查看)

内容的提问来源于stack exchange,提问作者전채이

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 15:35:26