質問: stream.Read(resBytes, 0, resBytes.Length); if (0 < n) { ms.Write(resBytes, 0, n); } else { break; } } } catch (Exception e) { throw e; } return ms.ToArray(); } ```
回答: 「これ以上読むべきデータがない状態」とは何かにより答えが変わりますが、「送信側で送ったすべてのデータを、受信側で読み終わった状態」を指すのであれば、Stream関係のクラスにそのような機能はありません。(コードやコメントを見た感じからそう仮定して以下書いています。違っていたらごめんなさい) SSLなので下層のプロトコルはTCPですが、TCPはストリーム指向でメッセージ境界の概念がないので、ユーザーがコード上でデータ区切りを指定しないといけません。Microsoftのサンプル では、`if (messageData.ToString().IndexOf("") != -1)`と、アプリで勝手に終端マークを決めて通信しています。このように終端を決めるか、TCPヘッダやHTMLのContent-Lengthのように序盤に長さを送るか、他にも方法はありますが、基本はそんな感じです。 正常な処理ルートでタイムアウトによる強制中断をすると、ただ回線が混んでいてパケットの到着が遅れているだけの場合でも、問答無用で切断してしまいます。