Long story short StreamWriterを使用してTcpClient経由で文字列を送信しようとしています。なぜこれらの2つのStreamWriterコンストラクタが私に異なる結果を与えるのですか?
これらのサンプルを交換する以外は他のコードを変更しないでください。それらは異なる結果を生み出す。サンプルコード1で
のStreamReaderは、DataAvailableを有し、メッセージが受信されたピックアップ。
コードサンプル2にはDataAvailableがないため、メッセージは受信されません。
public void SendMessage(string message)
{
message = "TestMessage";
//WORKING - Sample 1
using (var sw = new StreamWriter(stream))
{
sw.Write(message);
sw.Flush();
}
}
サンプル2メソッドを書く - - 書く
public void SendMessage(string message)
{
message = "TestMessage";
//NOT WORKING - Sample 2
var encoding = new UTF8Encoding(false, true);
using (var sw = new StreamWriter(stream, encoding, 1024, true))
{
sw.Write(message);
sw.Flush();
}
}
方法を私は2
サンプル1は、試料中のStreamWriteのコンストラクタを使用する必要が故に、オープン私の基本的な流れを維持する必要があります
読み取り方法
public string ReadMessage()
{
if (!stream.DataAvailable)
return null;
//I have also tried
//if(sr.Peek() == 0)
// return null;
string message = sr.ReadToEnd();
return message;
}
注:私は最後の作業を1と一緒に両方のサンプルを入れた場合、私は、メッセージが、間違いなく、それがtrueにDataAvailableを設定されていませんがストリーミングするために書いているように、「TestMessageTestMessage」を受信し得ますか?
アイデアの理由は何ですか?
作業状態と非稼働状態の完全な例を示してください。 SendMessageとReadMessageの間に何をしているのかを知るのは難しいです。 –
これは質問には直接関係していませんが、https://stackoverflow.com/questions/27961274/reading-information-from-a-port-waits-even-though-data-availableの回答から別のアプローチが得られるかもしれませんDataAvailableプロパティに依存するよりも。 –
writeメソッドを呼び出した直後にreadメソッドを呼び出していますか?この場合、DataAvailableプロパティは、チェックした時点で設定されていない可能性があります。スレッドを入れてみてください。書き込みと読み取りの間にスリープ状態(100)し、正常に機能しているかどうかを確認します。 –