0

クライアント接続を待機するコードを作成しようとしています。クライアントに接続されるとすぐに、ファイルの読み取りと送信を開始する必要があります。

ソケットハンドルの通知が必要です。つまり、クライアント側から接続が失われた場合、再接続を試みることができるように通知されます。

4

2 に答える 2

1

接続が失われた場合、クライアント側で再接続する必要があります。サーバーはクライアントに接続または再接続しません。

サーバーが単にファイルをディスペンスしている場合は、接続を受け入れて、ある時点でTransmitFile()を呼び出してクリーンアップするハンドラーに渡すだけです。

于 2013-01-08T16:16:09.213 に答える
0

クライアント接続の待機とファイルの送信に関する部分は、明確にするためのものであり、すでに機能していると想定しています。そうでない場合は、ソケットファイル I/Oに関するチュートリアルがたくさんあります。

あなたの場合、クライアントがまだ接続されているかどうかを検出するのは簡単です。サーバーは接続が確立されるとすぐにファイルを送信するため、クライアントはソケットが開かれるとすぐにソケットからの読み取りを開始します。read接続が開いていて、データが受信されない限り、関数はブロックします。接続が閉じられている場合は、0 バイトを読み取ったことを返します。その時点で、接続が終了したことがわかり、再接続を試みることができます。

ソケットから永続的に読み取るのではなく、将来の通信のために開いたままにしておく場合は、select-functionを調べる必要があります。これにより、1 つまたは複数のソケットを監視し、そのうちの 1 つに更新があるとすぐに通知します (たとえば、新しいデータ)。利用可能または接続が閉じられている)

于 2013-01-08T16:21:41.600 に答える