首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Winsockets身体之前和/或之后的奇怪字符

Winsockets身体之前和/或之后的奇怪字符
EN

Stack Overflow用户
提问于 2018-01-09 15:10:14
回答 1查看 43关注 0票数 1

我在我的C++项目中使用了一个简单的winsocket代码片段,试图从共享主机( host -ed.me)上的文件中提取数据。我的winsocket代码如下:

代码语言:javascript
复制
void write(string file, string text) {
   ofstream os;
   os.open(file, ofstream::app);
   text += "\n";
   os.write(text.c_str(), text.size());
   os.close();
}

bool request() {
   WSADATA wsa;
   SOCKET s;
   struct sockaddr_in server;
   char server_reply[4096];
   int recv_size;
   // initialize winsockets
   if (WSAStartup(MAKEWORD(2,2), &wsa) != 0) {
      write("log.txt", "winsockets initialization - error!");
      return false;
   }
   // open a socket
   if ((s = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) == INVALID_SOCKET) {
      write("log.txt", "socket opening - error!");
      return false;
   }
   // connect to server
   server.sin_addr.s_addr = inet_addr("46.105.118.169");
   server.sin_family = AF_INET;
   server.sin_port = htons( 80 );
   if (connect(s , (struct sockaddr *)&server , sizeof(server)) < 0) {
      write("log.txt", "server connection - error!");
      return false;
   }
   // send data
   string request;
   request += "GET /index.php HTTP/1.1\r\n";
   request += "Host: machines.host-ed.me\r\n";
   request += "Connection: close\r\n";
   request += "\r\n";
   if (send(s, request.c_str(), request.size(), 0) < 0) {
      write("log.txt", "data send - error!");
      return false;
   }
   // receive reply
   if ((recv_size = recv(s, server_reply, 4096, 0)) == SOCKET_ERROR) {
      write("log.txt", "data receive - error!");
      return false;
   }
   server_reply[recv_size] = '\0';
   write("log.txt", string(server_reply));   // gives strange characters
   // close socket
   closesocket(s);
   WSACleanup();
   return true;
}

我指的是奇怪的人物,看看这个回答:

代码语言:javascript
复制
HTTP/1.1 200 OK
Date: Tue, 09 Jan 2018 15:02:01 GMT
Server: Apache
Connection: close
Transfer-Encoding: chunked
Content-Type: text/html

9
hello PHP
0

我指的是内容前后的9和。服务器中的PHP代码如下所示:

代码语言:javascript
复制
<?php echo "hello PHP"; ?>

我不知道这是否是服务器问题,但是如果将文本更改为"hello2 PHP",则返回到我的winsock代码,如下所示:

代码语言:javascript
复制
a
hello2 PHP

我毫无头绪

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-01-09 15:13:10

您所看到的是HTTP1.1HTTP1.1,正如服务器在头中所指定的那样

代码语言:javascript
复制
Transfer-Encoding: chunked

每个块从它嵌入的数据的八进制数开始,在ASCII中表示为十六进制数,后面是可选参数(块扩展)和一个终止的CRLF序列,后面是块数据。该块由CRLF终止。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48171155

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档