0

I have a TCP client server application written on boost 1.53. Based on the client command I have to start a server thread to write some data to a socket. But I have no guarantee that the client application would start reading from this socket. Is there any trouble writing data to a socket without reading from it? Won't be there any socket overflow or data corruption ?

Looking forward to hearing your ideas.

Thx, Dmitry

4

2 に答える 2

1

低速または非協力的なリモート側にデータを送信するとどうなるかは、TCP のフロー制御の側面でカバーされています。

データを送信しようとして、リモート側のアプリケーションがその読み取りを拒否したとします。最終的にリモート側の受信ウィンドウがいっぱいになり、ウィンドウ サイズ 0 の ACK を送信することでこれを示します。ネットワーク スタックは、より大きなウィンドウ サイズの ACK を受信するまで、新しいパケットの送信を試みなくなります。データを送信しようとし続けると、ネットワーク スタックの送信バッファにデータが蓄積されます。バッファがいっぱいになると、ソケットブロックの側に書き込みます。

于 2013-09-11T15:06:39.673 に答える
0

TCP を使用すると、それは問題になりません。サーバーは、クライアントが読み取っていないことを検出し、クライアントが送信済みデータの受信を確認するまで、それ以上のデータの送信を保留します。この場合、サーバー スレッドは、クライアントがさらにデータを受け入れる準備ができるまでブロックされます。

また、TCP パケットはチェックサムされるため、転送中に破損した場合、クライアントはそれらを拒否し、サーバーはそれらを再送信します。

于 2013-09-11T14:57:48.647 に答える