完成tcp的状态,消息收发。
每次调试代码都很痛苦啊,即使是一次一次地迭代。调试了一天,解决了下面的几个问题。
这里编译器设置的问题,需要给case
后的语句加上大括号。这里昨天写的时候也遇到了。
这里是连接上了,也就是走完了三次握手;但是发送数据失败了,后面我加上打印查看了是否可以收到消息。
这里的问题是无法打印消息,这里的问题是指针的操作问题。
uint8_t hdr_len = tcphdr->data_off >> 4;
int payloadlen = tcplen - hdr_len * 4;
// 错误写法
uint8_t* payload = (uint8_t*)(tcphdr + hdr_len * 4);
// 正确写法
uint8_t* payload = (uint8_t*)tcphdr + hdr_len * 4;
这里的问题困扰了我一下午,就是client会多次发送数据;这明显是server没有回复对应的ack导致的。在我抓包调试后,我发现每次的seq和ack都有问题。解决方法如下图所示:
我们需要listen
状态的时候给stream->recv_next
赋值,就是获取client带来的ack来初始化我们的send_next
。
评论