为什么在C#网络中使用TCPListner时我们需要读/写器流?

时间:2009-03-18 05:57:40

标签: c#

为什么在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;

3 个答案:

答案 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提供了大量机会,可以轻松扩展您的算法,以处理将来可能出现的情况。