0

我正在用 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));

打开后。但这些似乎都不起作用。服务器没有错误地写入所有内容,但客户端没有收到所有内容。

4

2 回答 2

1

从模糊的记忆中:a)如果您想使用 SO_LINGER,请使用 close()。b)更强大的是半关机

shutdown(clientSckt, SHUT_WR)

然后 read() 直到你得到一个 0。

于 2013-02-08T04:40:07.730 回答
0

事实证明,我忘记将标题的字符长度添加到我发送过来的文件的长度中。因此,客户端在服务器发送所有内容之前关闭了连接。

于 2013-02-12T01:12:07.007 回答