为什么在C#网络中使用TCPListner时需要读写器流?
示例:
TcpClient client = server.AcceptTcpClient();
client.ReceiveTimeout = 75000;
Stream s = client.GetStream();
StreamReader reader = new StreamReader(s);
StreamWriter writer = new StreamWriter(s);
writer.AutoFlush = true;
答案 0 :(得分:2)
如果您想处理文本而不是二进制数据,则只需要StreamReader
/ StreamWriter
。
套接字自然地处理二进制数据,这就是TcpClient
公开Stream的原因。 Stream是二进制抽象,因此其读/写方法处理字节数组。 TextReader
/ TextWriter
(从中派生StreamReader
/ StreamWriter
)处理文本 - 它们的方法处理字符串和字符数组。
StreamReader
/ StreamWriter
基本上包装了一个流,并为您进行文本和二进制数据之间的转换(通过Encoding
)。
答案 1 :(得分:1)
你不需要它们。如果您不喜欢Tcp包装类,可以使用原始套接字。看看System.Net.Sockets.
答案 2 :(得分:1)
TcpListener旨在使用流,原因有两个。
首先,它使API与BCL中的其他中高级别(与使用原始套接字相比)API保持一致。例如,处理文件IO的标准方法是使用Streams。
其次,流为读取和写入TCP通道提供了巨大的优势。的确,当你处理非常简单的案件时,他们会稍微改善生活,但只是稍微有些困难。但是,当您开始考虑更复杂的场景时,它们会使一切变得更加简单。
例如,如果Tcp API没有使用流,那么通过连接压缩流量(只是通过GZipStream或类似程序传递writer + reader)会更加困难,或者更加困难。通过网络加密所有通信。 Streams提供了大量机会,可以轻松扩展您的算法,以处理将来可能出现的情况。