c - 为什么客户端将网络服务器的消息回显给它?

标签 c linux sockets http server

我制作了一个简单的 Linux 套接字网络服务器并观察了它的 http 流量。通常,当它将 HTTP 200 或 404 发送回请求 GET 或 POST 客户端(Web 浏览器或扫描仪)时,客户端会回显服务器刚刚发送回它的消息。他们为什么这样做?他们期望从我的服务器得到什么答案?

new connection 0 established with 37.236.190.20:39889

new message 0 received from 37.236.190.20:39889

GET / HTTP/1.1 Connection: Keep-Alive Keep-Alive: 300 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHT ML, like Gecko) Chrome/63.0.3239.132 Safari/537.36 Host: 18.231.188.211

sent file login.html to 0 37.236.190.20:39889 successfully | nsent = 550

new message 0 received from 37.236.190.20:39889

HTTP/1.1 200 OK Connection: close Content-Length: 465 Content-Type: text/html

[html page I sent here]

sent file login.html to 0 37.236.190.20:39889 successfully | nsent = 550

connection 0 with 37.236.190.20:39889 was forcebly closed. cause: echoing

最佳答案

由于我在任何地方都没有找到此类行为的任何记录,因此在 gdb 的帮助下,我发现我正在使用一个无符号变量来保存错误时返回 -1 的函数的返回值。

msg_buffer.length = recv(connected[i].socket, msg_buffer.data, msg_buffer.size, 0);
if (msg_buffer.length < 0) { // no message

因此第二行中的评估永远不会为真,并且消息的长度将为 0xffffffffffffffff。但由于缓冲区保存了我之前发送的消息,并且没有收到新消息来覆盖该消息,因此客户端似乎正在回显我的服务器。 谢谢大家的帮助。并对这个错误表示歉意。

关于c - 为什么客户端将网络服务器的消息回显给它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50100446/

相关文章:

c - 该指针函数中返回代码的用途是什么?

linux - tar 另一个目录的子目录下的文件列表

linux - 如何将消息写入 FIFO 并同时从另一个进程读取它

C: 如何从dll API调用函数?

c - C中的指针逻辑练习

django - 使用 bash 脚本删除 django 的数据库设置

Python 套接字 - 创建消息格式

java - Python 中相当于 Java InputStream 的 available 方法是什么?

c++ - 通过 UDP 套接字传输结构的问题

c++ - 内存泄漏问题