我试图在c ++ usind SDL中检索websice的内容,但它给了我这个错误:
'SDL_main':必须返回值
我的代码是:
#include <iostream>
#include "SDL.h"
#include "SDL_net.h"
#include <cstring>
int main(int argc,char** argv)
{
SDL_Init(SDL_INIT_EVERYTHING);
SDLNet_Init();
IPaddress ip;
SDLNet_ResolveHost(&ip,"www.linux.org",80);
const char* http="GET / HTTP/1.1\nHost: www.linux.org\n\n";
TCPsocket client=SDLNet_TCP_Open(&ip);
SDLNet_TCP_Send(client,http,strlen(http)+1);
char text[10000];
while(SDLNet_TCP_Recv(client,text,10000))
std::cout << text;
SDLNet_TCP_Close(client);
SDLNet_Quit();
SDL_Quit();
}
当我把0返回时;最后,它建立了项目,但在此之后立即完成 (我正在使用vs2012)
更新
cout<<"Some message";
没有打印任何内容,我是否可能将导入配置错误?那些额外的依赖是对的吗?
SDL.lib; SDL_net.lib; SDLmain.lib
我不知道还有什么可能是错的......
答案 0 :(得分:5)
这是因为SDL定义了这样一个宏:
#define main SDL_main
因此,您编写的函数实际上称为SDL_main
,并且与任何其他不是实际main
函数的函数一样,如果它不返回void
,则必须给它一个return
声明。
答案 1 :(得分:0)
因为你的代码没有永远循环,它只是在第一次传递后返回0,你需要做一个循环:
while(1){
sdl_events event;
switch(event){
//handle events, drawings and so on
...
...
...
case SDL_QUIT:
exit (0);
break;
}
}
http://sdl.beuc.net/sdl.wiki/OpenGL_Full_Example
<强>更新强>
您可能在连接到主机时遇到一些问题,因此您可以检查连接是否成功:
#define MAXLEN 1024
int result;
char msg[MAXLEN];
result = SDLNet_TCP_Recv(sock,msg,MAXLEN-1);
if(result <= 0) {
// TCP Connection is broken. (because of error or closure)
SDLNet_TCP_Close(sock);
exit(1);
}
else {
msg[result] = 0;
printf("Received: \"%s\"\n",msg);
}
更新2
改变这个:
while(SDLNet_TCP_Recv(client,text,10000))
std::cout << text;
到此:
while(SDLNet_TCP_Recv(client,text,9999))
std::cout << text;
更新3
试试这个,把你的接收部分放在这个if语句中
if(SDLNet_SocketReady(client) == 1)
{
while(SDLNet_TCP_Recv(client,text,9999))
std::cout << text;
}
如果这仍然不起作用我建议使用QT套接字或Boost asio,既可以异步也可以更直观