SDL_net不接收UDP数据包

时间:2016-04-24 02:18:30

标签: c sdl sdl-net

我正在尝试与我的esp8266通信,正如您所看到的,我每2秒成功收到一个数据包:

wireshark screenshot

wireshark

但似乎我的SDL_net应用程序中没有收到任何数据(如果最后的if总是假的话):

#include <stdlib.h>
#include <SDL2/SDL.h>
#include <SDL2/SDL_net.h>

int main(int argc, char **argv)
{   
    /* initialize SDL */
    if(SDL_Init(0)==-1)
    {
        printf("SDL_Init: %s\n",SDL_GetError());
        exit(1);
    }

    /* initialize SDL_net */
    if(SDLNet_Init()==-1)
    {
        printf("SDLNet_Init: %s\n",SDLNet_GetError());
        exit(2);
    }
        UDPsocket udpsock;

        udpsock=SDLNet_UDP_Open(6666);
        if(!udpsock) {
            printf("SDLNet_UDP_Open: %s\n", SDLNet_GetError());
            exit(2);
        }

        UDPpacket *packet  = SDLNet_AllocPacket(2048);
        int numrecv;

        while(1)
        {

            if(SDLNet_UDP_Recv(udpsock, packet)) {
                printf("%s",packet->data);
            }
        }

    /* shutdown SDL_net */
    SDLNet_Quit();

    /* shutdown SDL */
    SDL_Quit();

    return(0);
}

当我从localhost发送数据包时,它工作,所以我试图关闭我的防火墙,但它仍然无法正常工作。谢谢你的帮助。

编辑: 所以,我尝试使用boost :: asio编写类似的东西。两个程序(SDL_net和boost :: asio)都接收来自localhost的数据包,但是没有一个程序可以从不同的设备接收任何内容(我尝试了我的发送程序,它可以通过localhost在另一台PC上运行,但仍然没有成功)。所以我猜我的Ubuntu有问题。关于我应该怎么做的任何建议?

1 个答案:

答案 0 :(得分:0)

好吧,我想我终于找到了问题,我试图为数据包分配太多空间。我不知道为什么它甚至重要,但是当我在SDLNet_AllocPacket(2048)中更改了数字时;到32,一切都开始工作了