我正在尝试将我的程序(使用Embarcadero C ++ builder和Indy协议栈编写)连接到专有服务器。我应该发送一个HTTP命令“GET /hyd/1.s16”,此时服务器应该向我发送一堆数据。出于某种原因,我的协议栈发送了一个Fin Ack以响应“HTTP / 1.0 200 OK数据包。”
当我使用服务器模拟器运行时,一切正常:
Link to good Wireshark capture
当客户使用实际服务器运行时,我使用的协议栈不喜欢服务器发送的“HTTP / 1.0 200 OK数据包”并发送“Fin Ack”响应 - 数据包7。
TIdTCPClient *TCPClient;
TCPClient->Port = M3R_PORT;
TCPClient->Host = IntToStr((int) ipAddPt1) + "." +
IntToStr((int) ipAddPt2) + "." +
IntToStr((int) ipAddPt3) + "." +
IntToStr((int) ipAddPt4);
TCPClient->Connect();
TCPClient->IOHandler->Write(m3rData);//"GET /hyd/1.s16 HTTP/1.0\x0d\x0a\x0d\x0a");
while (!done) {
readLine[x] = TCPClient->IOHandler->ReadLn(); // extension-header = ChannelId
if (readLine[x].Length() <= 0) {
done = true;
}
}
答案 0 :(得分:0)
这里没有任何东西被拒绝。您和服务器在没有keepalive
选项的情况下说HTTP 1.0。这意味着每个连接有一个请求/响应。收到响应后,您的客户端完全正确关闭连接。