哪种在 TCP 中发送消息的方法更受欢迎?
Which method of sending messages in TCP more preferred?
我正在尝试使用 C# 制作一个 TCP client/server 应用程序,我很困惑在通过网络发送消息时这两种风格之间使用什么更好。
我遇到的第一种方式是将消息转换为字节数组,然后使用 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();
}
如果通过网络发送的消息最多为 1 兆字节,这两者在内存、速度和性能方面哪个更有效?
一个StreamWriter
实例总是使用相同的编码(你可以在它的构造函数中指定),并且有一些方便的方法将不同类型的数据写入流。
在您的第一个示例中,您或多或少地执行了 StreamWriter
在后台执行的操作:应用编码并将数据写入基础流。
如果您必须发送多位数据(使用相同的编码),使用 StreamWriter
会导致代码更清晰。对于单个 string
,我认为采用哪种方法并不重要。
我正在尝试使用 C# 制作一个 TCP client/server 应用程序,我很困惑在通过网络发送消息时这两种风格之间使用什么更好。
我遇到的第一种方式是将消息转换为字节数组,然后使用 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();
}
如果通过网络发送的消息最多为 1 兆字节,这两者在内存、速度和性能方面哪个更有效?
一个StreamWriter
实例总是使用相同的编码(你可以在它的构造函数中指定),并且有一些方便的方法将不同类型的数据写入流。
在您的第一个示例中,您或多或少地执行了 StreamWriter
在后台执行的操作:应用编码并将数据写入基础流。
如果您必须发送多位数据(使用相同的编码),使用 StreamWriter
会导致代码更清晰。对于单个 string
,我认为采用哪种方法并不重要。