を介してデータを読み取るメソッドがあり、いくつかTcpClient
のNetworkStream
エラーが発生しています。
調査中に、実際には正常に機能することがわかりました...ただし、ブレークポイントを使用して、Visual Studio 2012 のデバッガーでコードをステップ実行した場合のみです。
これが私のコードです:
public static byte[] DownloadStream(string hostname, int port,
byte[] requestBytes, int bufferSize = 4096)
{
byte[] responseBytes = null;
var client = new System.Net.Sockets.TcpClient(hostname, port);
if (client.Connected)
{
using (var stream = client.GetStream())
{
stream.Write(requestBytes, 0, requestBytes.Length);
stream.Flush();
if (stream.CanRead)
{
var responseStream = new System.IO.MemoryStream();
byte[] buffer = new byte[bufferSize];
int bytesRead = 0;
do
{
bytesRead = stream.Read(buffer, 0, buffer.Length);
responseStream.Write(buffer, 0, bytesRead);
}
while (stream.DataAvailable);
responseBytes = responseStream.ToArray();
}
}
}
client.Close();
return responseBytes;
}
実際のエラーがないため、これはかなりイライラします。を読み取る間、デバッガーが手を握るだけでよいようNetworkStream
です。
なぜこれが起こっているのか誰にも分かりますか?どうすれば修正できますか?
編集:
何らかの理由で、この変更を行うと問題が解消されます。
do
{
bytesRead = stream.Read(buffer, 0, buffer.Length);
responseStream.Write(buffer, 0, bytesRead);
System.Threading.Thread.Sleep(1); //added this line
}
while (stream.DataAvailable);
これに関する洞察はありますか?