C# 通过NamedPipe发送多行字符串?
如何通过命名管道发送带有空行的多行字符串 如果我发送一个字符串C# 通过NamedPipe发送多行字符串?,c#,streamreader,named-pipes,streamwriter,C#,Streamreader,Named Pipes,Streamwriter,如何通过命名管道发送带有空行的多行字符串 如果我发送一个字符串 string text= @"line 1 line2 line four "; StreamWriter sw = new StreamWriter(client); sw.Write(text); 我只在服务器端获取第1行: 当我尝试这样的事情时 StringBuilder message = new StringBuilder(); string line; while ((line = sr.ReadLine()) !
string text= @"line 1
line2
line four
";
StreamWriter sw = new StreamWriter(client);
sw.Write(text);
我只在服务器端获取第1行:
当我尝试这样的事情时
StringBuilder message = new StringBuilder();
string line;
while ((line = sr.ReadLine()) != null)
{
message.Append(line + Environment.NewLine);
}
它在客户端连接时挂起在循环中,只有在客户端断开连接时才会释放
你知道我怎样才能不挂在这个环上就得到整根绳子吗?
我需要处理字符串并以相同的方式将其返回给客户端
保留字符串的原始格式很重要,包括空行和空格。为什么不调用StreamReader
StreamReader sr = new StreamReader(server);
string message = sr.ReadToEnd();
为什么不直接访问StreamReader
StreamReader sr = new StreamReader(server);
string message = sr.ReadToEnd();
StreamReader是一种面向行的阅读器。它将读取以换行符结尾的第一行。如果您想要文本的其余部分,则必须发出多个readline。即:
StreamReader sr = new StreamReader(server);
string message = sr.ReadLine(); // will get "line1"
string message2 = sr.ReadLine(); // will get "line2"
您不希望读取在网络流上结束,因为这将挂起读卡器,直到服务器关闭连接。这可能需要很长时间,并可能导致缓冲区溢出
通常,您会看到:
NetworkStream stream = CreateNetworkStream(); // however you're creating the stream
using (StreamReader reader = new StreamReader(stream))
{
string line;
while ((line = reader.ReadLine()) != null)
{
// process line received from stream
}
}
这将在接收到每一行时为您提供该行,并在服务器关闭流时终止
如果希望读取器将整个多行字符串作为单个实体进行处理,则无法使用StreamReader可靠地完成此操作。您可能希望在服务器上使用BinaryWriter,在客户端使用BinaryReader。StreamReader是一种面向行的阅读器。它将读取以换行符结尾的第一行。如果您想要文本的其余部分,则必须发出多个readline。即:
StreamReader sr = new StreamReader(server);
string message = sr.ReadLine(); // will get "line1"
string message2 = sr.ReadLine(); // will get "line2"
您不希望读取在网络流上结束,因为这将挂起读卡器,直到服务器关闭连接。这可能需要很长时间,并可能导致缓冲区溢出
通常,您会看到:
NetworkStream stream = CreateNetworkStream(); // however you're creating the stream
using (StreamReader reader = new StreamReader(stream))
{
string line;
while ((line = reader.ReadLine()) != null)
{
// process line received from stream
}
}
这将在接收到每一行时为您提供该行,并在服务器关闭流时终止
如果希望读取器将整个多行字符串作为单个实体进行处理,则无法使用StreamReader可靠地完成此操作。您可能希望在服务器上使用BinaryWriter,在客户机上使用BinaryReader。我通过使用令牌替换将消息中的所有\r和\n替换为{cr}和{lf}等令牌,从而将多行消息转换为一行,从而完成了通过命名管道发送多行消息的过程 当然,我需要对接收端进行反向转换 假设在源文本中永远找不到被替换的标记 你可以用{lp}替换所有的{,这样{就变成了你的转义字符 您可以使用Regex进行这些替换
这非常有效,并允许我使用StreamReader。我通过使用令牌替换将消息中的所有\r和\n替换为{cr}和{lf}之类的令牌,从而将多行消息转换为一行,从而通过命名管道发送多行消息 当然,我需要对接收端进行反向转换 假设在源文本中永远找不到被替换的标记 你可以用{lp}替换所有的{,这样{就变成了你的转义字符 您可以使用Regex进行这些替换
这非常有效,允许我使用StreamReader。同样的效果,他只有在客户端断开连接时才会释放。同样的效果,他只有在客户端断开连接时才会释放。使用BinaryWriterstring消息和BinaryReaderstring消息非常有效。谢谢!使用BinaryWriterstring消息和BinaryReaderstring消息非常有效谢谢你的魅力!