Microchip Web服务器,HTTP 200 OK帧后不接收确认

时间:2014-06-21 14:38:10

标签: c sockets http tcp microcontroller

我目前的项目是裸机网络服务器。为此,我没有使用库,直接编程到芯片上。我现在要做的就是发送一条HTTP数据:

HTTP/1.1 200 OK\r\n
Content-Length: 45\r\n
Content-Type: text/html\r\n
Server: microserver\r\n
Connection: close\r\n
\r\n
<!DOCTYPE html><html>Hello<br>world!<hr></html>

我的服务器尝试执行以下步骤:

  1. 收到SYN

  2. 发送[SYN + ACK]

  3. 收到确认

  4. 接收包含HTTP GET的ACK

  5. 用HTTP数据发送[ACK,PUSH,FIN](这个改变很多,我尝试单独发送ACK PUSH和FIN(内容在PUSH中),尝试[ACK + PUSH],FIN和ACK,[PUSH + FIN]。

  6. 接收[ACK + FIN]&lt;&lt; ---这是错误的地方,根据wireshark的说法,它甚至都没有发送。

  7. 发送确认。

  8. 如上所述,每次都在第6步出错。无论我在步骤5中使用何种ACK,PUSH和FIN组合。使用wireshark查看时,所有的SEQ和ACK编号都是正确的。

    我的服务器能够在[FIN + ACK]最终发送后关闭连接,这有时会发生在浏览器同步保持打开的套接字上。

    Wirehark记录的Pcap文件:https://www.dropbox.com/s/062k9hkgkenaqij/httpdump.pcap与过滤器:(tcp.dstport == 80 || tcp.srcport == 80) && (ip.dst == 169.254.100.100 || ip.src == 169.254.100.100)

    我知道有一个4岁的非常相似的问题,Building a webserver, client doesn't acknowledge HTTP 200 OK frame,但我已经尝试了那里建议的所有内容,而且它似乎没有让我更进一步,所以我'我没有想法。

    编辑: 我已经找到了问题,在研究了几个小时的wirehark捕获结束后。显然,错误是我没有使用数据来计算TCP校验和......但是,找到了解决方案。

0 个答案:

没有答案