我正在使用 UDP 编写一个简单的 Web 服务器和客户端,到目前为止:
- 程序可以相互连接,
- 客户端可以发送请求,
- 服务器可以读取请求,
- 服务器可以识别客户端的IP地址和客户端的端口,并且
- 服务器可以将消息发送回客户端
我的问题是我的客户端代码卡在rcvfrom
函数中等待,即使在服务器发送响应之后也是如此。
这是应该获取服务器消息并返回套接字读取的字节数的函数:
ssize_t receive_from_server(rdp_socket *rsocket, char *buffer, size_t buf_len){
socklen_t sendsize = sizeof(rsocket->server_addr);
bzero(&(rsocket->server_addr), sendsize);
//STUCK HERE:
return recvfrom(rsocket->sockfd, buffer, buf_len, 0,
(struct sockaddr*)&(rsocket->server_addr), &sendsize);
}
我为两者设置了 sockoptsSO_SNDTIMEO
并SO_RCVTIMEO
在几秒钟后超时。
问题:
在短期内,我将添加确认 (ACK) 以实现可靠的数据传输。我想丢失 ACK 可能是问题所在,但我只是想知道,对于受过训练的眼睛来说,这是否是一个不同的问题。
超时工作是否需要 ACK?
如何同步我的客户端和服务器,以便它们能够真正相互通信?