長話短說我想通過使用StreamWriter的TcpClient發送一個字符串。這兩個StreamWriter構造函數爲什麼會給我不同的結果?
不更改任何其他代碼,只是交換這些樣本。他們產生不同的結果。
在代碼示例1中,StreamReader發現它具有DataAvailable並且接收到消息。
代碼示例2它沒有DataAvailable,因此沒有收到消息。我需要讓我的基礎流開,因此需要使用StreamWrite的構造樣品2
樣品1 - Write方法
public void SendMessage(string message)
{
message = "TestMessage";
//WORKING - Sample 1
using (var sw = new StreamWriter(stream))
{
sw.Write(message);
sw.Flush();
}
}
樣品2 - Write方法
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();
}
}
閱讀方法
public string ReadMessage()
{
if (!stream.DataAvailable)
return null;
//I have also tried
//if(sr.Peek() == 0)
// return null;
string message = sr.ReadToEnd();
return message;
}
注意:如果我把兩個樣本放在一起工作最後我收到消息「TestMessageTestMessage」,所以它肯定是寫入流,但它不是設置DataAvailable爲true?
任何想法的原因是什麼?
請提供一個在工作和非工作狀態下的完整示例。在SendMessage和ReadMessage之間很難分辨你正在做什麼。 –
它與問題沒有直接關係,但https://stackoverflow.com/questions/27961274/reading-information-from-a-port-waits-even-though-data-available的答案可能會給你另一種方法比依靠DataAvailable屬性。 –
你是否在調用write方法後立即調用read方法?在這種情況下,DataAvailable屬性在您檢查時可能尚未設置。嘗試把線程。在你的書寫和閱讀之間休息(100),看看它是否有效。 –