我正在使用Winsock中的TCP套接字编写minecraft Classic Server,我正在编写函数来执行“心跳”,只是一个HTTP请求,它应该返回一个URL给我 – 根本没有头文件或HTML。
它将数据发送到minecraft.net(至less它说的是这样),但是在那之后几分钟,它告诉我它没有从minecraft.net得到数据,即它读取“HeartBeat:Recieved no data来自minecraft.net“
void HeartBeat() { unsigned int clSock; struct hostent *host; struct sockaddr_in server_addr; char buffer[128] = ""; char request[256] = "GET /"; //(I will not show the rest of the request...) if((clSock = socket(AF_INET,SOCK_STREAM,0)) < 0) { printf("HeartBeat: Error creating socketn"); return; } else { printf("HeartBeat: Success in creating socketn"); } printf("HeartBeat: Resolving hostname 'www.minecraft.net'... "); if((host = gethostbyname("www.minecraft.net")) == NULL) { printf("Failedn"); return; } else { printf("success!n"); } server_addr.sin_family = AF_INET; server_addr.sin_port = htons(80); server_addr.sin_addr.s_addr = *((unsigned long*)host->h_addr); if (connect(clSock,(SOCKADDR*) &server_addr,sizeof(server_addr)) == SOCKET_ERROR) { printf("HeartBeat: Error conneting to www.minecraft.netn"); return; } else { printf("HeartBeat: Connected to www.minecraft.netn"); } if (send(clSock,request,sizeof(request),0) < 0) { printf("HeartBeat: Sending data Failed.n"); closesocket(clSock); return; } else { printf("HeartBeat: Success in sending data.n"); } if ((recv(clSock,buffer,sizeof(buffer),0)) == 0) { printf("HeartBeat: Received no data from www.minecraft.netn"); closesocket(clSock); return; } else { printf("HeartBeat: Yay,success! Url is '%s'",buffer); closesocket(clSock); return; } }
有人能指出我出错的地方吗? 太感谢了。
增加FD_SETSIZE的限制并select
未定义的引用sync_fetch_and_add_4
如何确定button点击期间何时按下控制键
getc是macros还是函数?
使用MiniDump获取句柄数据(DbgHelp.h)
send()总是被EPIPE中断
在Android中转换现有的Windows 10 UWP应用程序
在运行时,如何通过编程来确定dynamic链接库使用了多less内存?
你没有发送HTTP请求。
一个(最小的)HTTP请求必须至少是字符串:
char request[256] ="GET / HTTP/1.0rnrn";
或者在HTTP 0.9的情况下:
char request[256] ="GET /rnrn";
您只能发送该字符串,而不是包含大量0字节的整个请求缓冲区,因此:
send(clSock,strlen(request),0)
你正在做1 recv()调用,可能不会读取整个响应。 你应该阅读,直到连接关闭(直到recv()返回0)。 或者要真正遵循HTTP协议,则需要解析响应,查找Content-Length标头。 阅读所有的标题,然后读取正文中的字节数(如果有的话)。 要真正处理HTTP的所有细节,你确实需要一个HTTP库。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。