长话短说我想通过使用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),看看它是否有效。 –