在TCP中发送消息的哪种方法更受欢迎?

在TCP中发送消息的哪种方法更受欢迎?

问题描述:

我正在玩弄一个使用C#的TCP客户端/服务器应用程序,我很困惑这两种风格之间在通过网络发送消息时使用哪种更好。在TCP中发送消息的哪种方法更受欢迎?

我遇到的第一种风格是将消息转换为字节数组,并使用NetworkStream.Write(*)方法将其写入到TcpClient实例的NetworkStream中。

void StyleOne(string msg) 
{ 
      TcpClient client = new TcpClient(); 
      client.Connect(ip, port); 
      NetworkStream nwStream = client.GetStream(); 
      byte[] bytesToSend = ASCIIEncoding.ASCII.GetBytes(msg); 

      nwStream.Write(bytesToSend, 0, bytesToSend.Length); 
      nwStream.Flush(); 
      client.Close(); 
} 

我遇到正在通过的TcpClient实例的的NetworkStream到一个StreamWriter,然后使用StreamWriter.Write()方法将消息写入到流

void StyleTwo(string msg) 
{ 
      TcpClient client = New TcpClient(ip, port); 
      StreamWriter writer = New StreamWriter(client.GetStream()); 
      writer.Write(msg); 
      writer.Flush(); 
      client.Close(); 
} 

这两个的是更有效的另一种样式条款内存,速度和性能如果通过网络发送的消息最多只有兆字节大?

+0

第一种方法更好,因为您知道编码。 Ascii编码将删除不可打印的字符。 – jdweng

+0

[哪个更快?](https://ericlippert.com/2012/12/17/performance-rant/) –

A StreamWriter实例始终使用相同的编码(可以在其构造函数中指定),并且有一些便捷方法可以将不同类型的数据写入流。

在你的第一个例子中,你或多或少地在做什么StreamWriter会在底层做些什么:应用编码并将数据写入基础流。

如果您必须发送多位数据(使用相同的编码),那么使用StreamWriter会导致更清晰的代码。对于只有一个string我不认为这真的很重要你采取的方法。

+0

所以基本上,他们在做什么和效率方面是一样的?如果我使用这个 'StreamWriter writer = new StreamWriter(client.GetStream(),ASCIIEncoding.ASCII)创建'StreamWriter'的一个实例' 它会和第一个代码片段一样吗?记忆力,速度等没有差异? – ReiSchneider

+0

@ReiSchneider总是有一个区别,自己应用编码的开销要少一点。我确实认为L.B_正试图帮助,因为很多人倾向于优化性能而不意识到他们的代码变得非常混乱。如果不是这样的话,请不要亲自采访:) –