我正在用C / C ++编写一个简单的服务器。我有一切都很完整,但有一个问题。服务器无法将文件的最后三行发送到客户端。我假设我过早地关闭了套接字连接,但是我试图解决这个问题却失败了。例如,调用
shutdown(clientSckt, SHUT_RDWR);
在调用客户端套接字的close()方法之前。并为套接字参数添加延迟,如下所示:
struct linger l;
l.l_onoff = 1;
l.l_linger = 1;
setsockopt(clientSckt, SOL_SOCKET, SO_LINGER, &l, sizeof(l));
打开后。但这些似乎都不起作用。服务器写入所有内容没有错误,但客户端没有收到任何内容。
答案 0 :(得分:1)
来自模糊的记忆: a)如果你想使用SO_LINGER,请使用close()。 b)更强大的是半关闭
shutdown(clientSckt, SHUT_WR)
然后读取()直到得到0。
答案 1 :(得分:0)
事实证明,我忘了将标题的字符长度添加到我发送的文件的长度。因此,客户端在服务器发送所有内容之前关闭了连接。