实现确认包

时间:2014-10-24 20:16:17

标签: c sockets tcp packet

我试图实现一个简单的即时消息服务器并提出以下问题:

如何使用确认包实现协议?

我认为它可以这样实现:

>> client sends packet with ACKID and waits for ACKID to arrive
<< server receives packet and sends the same ACKID back
now the client knows the packet was fully delivered.

但是在这个概念中,客户端将阻塞,直到ACKID被发回,如果另一个数据包中断了这个过程,那么客户端将永远阻塞(或直到超时发生)。

1 个答案:

答案 0 :(得分:1)

我假设你现在正在发送这样的数据:

Send("mydata");

现在,这样做:

Send("mydata");
auto ack = Receive();
assert(ack == "data acknowledged");

(伪代码)。

对两个操作都使用超时。只有当接收完成且没有错误时,您才知道已收到数据。

同样的原则可以转换为异步IO API。这对于这个问题并不重要。

(停止在TCP的上下文中讨论“数据包”.TCP不知道那是什么。)