0

C/C++ で単純なサーバーを作成しています。おおむね揃っていますが、一つ問題があります。サーバーは、ファイルの最後の 3 行をクライアントに送信できません。ソケット接続を時期尚早に閉じていると思いますが、これを修正する試みは失敗しました。たとえば、

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)

そして、0 になるまで read() を繰り返します。

于 2013-02-08T04:40:07.730 に答える
0

送信したファイルの長さにヘッダーの文字長を追加するのを忘れていたことが判明しました。したがって、サーバーがすべてを送信する前に、クライアントは接続を閉じていました。

于 2013-02-12T01:12:07.007 に答える