首页 > 解决方案 > c ++ udp服务器不接收数据包

问题描述

我用 Java 客户端用 C++ 编写了一个 UDP 接收器。

客户端的接收器 IP(C++ 服务器)设置192.168.1.xxx为服务器和客户端位于不同设备上的专用网络中。

一切正常。

在另一方面。我有一个 3ds Max 插件,它分叉一个线程来做一些异步的事情。问题是当我在该线程中运行提到的 C++ 服务器代码时,它什么也没有收到。

线程是否在无法访问的本地环境中运行192.168.1.xxx

maxsdk C++ 部分

void InitWinsock()
{
    WSADATA wsaData;
    WSAStartup(MAKEWORD(2, 2), &wsaData);
}

void update_state(Interface* ip)
{
    SOCKET socketS;

    InitWinsock();
    struct sockaddr_in local;
    struct sockaddr_in from;
    int fromlen = sizeof(from);
    local.sin_family = AF_INET;
    local.sin_port = htons(12345);
    local.sin_addr.s_addr = inet_addr("192.168.1.106");

    socketS = socket(AF_INET, SOCK_DGRAM, 0);
    bind(socketS, (sockaddr*)&local, sizeof(local));
    char buffer[1024];
    while (1)
    {
        ZeroMemory(buffer, sizeof(buffer));

        if (recvfrom(socketS, buffer, sizeof(buffer), 0, (sockaddr*)&from, &fromlen) != SOCKET_ERROR)
        {
            printf("Received message from %s: %s\n", inet_ntoa(from.sin_addr), buffer);
            ip->PushPrompt((wchar_t*)buffer);
            //sendto(socketS, buffer, sizeof(buffer), 0, (sockaddr*)&from,    fromlen);
        }

        Sleep(50);
    }
    closesocket(socketS);

    return;
}

void PCamMaxPlugin::BeginEditParams(Interface* ip,IUtil* iu) 
{
    this->iu = iu;
    hPanel = ip->AddRollupPage(
        hInstance,
        MAKEINTRESOURCE(IDD_PANEL),
        DlgProc,
        GetString(IDS_PARAMS),
        0);
    thread (update_state, ip).detach();
    ip->PushPrompt(_M("----"));
}

C++ UDP 服务器

#include <winsock.h>
#include <cstdio>

#pragma comment(lib, "Ws2_32.lib")

void InitWinsock()
{
    WSADATA wsaData;
    WSAStartup(MAKEWORD(2, 2), &wsaData);
}

int main()
{
    SOCKET socketS;

    InitWinsock();
    struct sockaddr_in local;
    struct sockaddr_in from;
    int fromlen = sizeof(from);
    local.sin_family = AF_INET;
    local.sin_port = htons(12345);
    local.sin_addr.s_addr = inet_addr("192.168.1.106");

    socketS = socket(AF_INET, SOCK_DGRAM, 0);
    bind(socketS, (sockaddr*)&local, sizeof(local));
    char buffer[1024];
    while (1)
    {
        ZeroMemory(buffer, sizeof(buffer));
        if (recvfrom(socketS, buffer, sizeof(buffer), 0, (sockaddr*)&from, &fromlen) != SOCKET_ERROR)
        {
            printf("Received message from %s: %s\n", inet_ntoa(from.sin_addr), buffer);
            //sendto(socketS, buffer, sizeof(buffer), 0, (sockaddr*)&from, fromlen);
        }
        Sleep(50);
    }
    closesocket(socketS);

    return 0;
}

标签: c++socketsudp3dsmax

解决方案


推荐阅读