SDLNet网络无法正常工作

我正在使用SDL编写一个用C语言编写的游戏。 鉴于它已经使用了SDL,SDL_image和SDL_ttf,我决定将SDL_mixer和SDL_net添加到我的引擎中。 让SDL_mixer设置和工作非常简单,但我在使用SDL_net时遇到了很多麻烦。

为了测试我使用以下规则创建了一个非常简单的应用程序:

  • 不带参数的运行充当端口9999上的TCP服务器
  • 使用参数运行尝试连接到端口9999上给定IP地址的服务器

以下是该程序的一些关键行(我不会发布我的整个事件驱动的SDL引擎,因为它太长了):

char *host = NULL; if (argc > 1) host = argv[1]; 

和…

 IPaddress ip; TCPsocket server = NULL; TCPsocket conn = NULL; if (host) { /* client mode */ if (SDLNet_ResolveHost(&ip,host,port) < 0) return NULL; //this is actually inside an engine method if (!(conn = SDLNet_TCP_Open(&ip))) return NULL; } else { /* server mode */ if (SDLNet_ResolveHost(&ip,NULL,port) < 0) return NULL; if (!(server = SDLNet_TCP_Open(&ip))) return NULL; } 

和…在事件循环内

 if (server) { if (!conn) conn = SDLNet_TCP_Accept(server); } if (conn) { void *buf = malloc(size); //server, conn, size are actually members of a weird struct while (SDLNet_TCP_Recv(conn,buf,size)) onReceive(buf); //my engine uses a callback system to handle things free(buf); } 

该程序似乎启动就好了。 但是出于某种原因,当我在客户端模式下运行它试图从我的笔记本电脑连接到我的家用电脑(我有不同的IP)时,我发现对SDLNet_TCP_Open的调用会阻止程序一段时间(5-10秒)然后返回空值。 谁能看到我做错了什么? 我应该发布更多的代码吗? 让我知道。