2016-04-24 88 views
0

我想用我的esp8266进行沟通,你可以看到,我成功地从它接收数据包每2秒:SDL_net没有收到UDP包

wireshark screenshot

wireshark

但似乎我没有收到我的SDL_net应用程序的任何数据(如果同时在年底保持始终为假):

#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); 
} 

它工作时,我已经从本地主机发送数据包,所以我试图关闭我的防火墙,但它仍然无法工作。谢谢你的帮助。

编辑: 所以,我试图用boost :: asio编写类似的东西。这两个程序(SDL_net和boost :: asio)都接收来自本地主机的数据包,但它们都不能接收来自其他设备的任何内容(我尝试了我的发送程序,该程序在本地主机上,在不同的PC上,但仍然没有成功)。所以我想我的Ubuntu有什么问题。有关我应该怎么做的任何建议?

+0

要调试第一步,添加一个else打印任何错误:'if(SDLNet_UDP_Recv(udpsock,packet))printf(“%s”,packet-> data); } else {//打印错误}' – fluter

+0

非常感谢您的回答,我尝试添加printf(“%s”,SDLNet_GetError());在其他地方,但没有发生(没有错误打印)。 – vyzigold

回答

0

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