【发布时间】:2018-02-25 13:24:16
【问题描述】:
我正在使用 C# 制作 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();
}
如果通过网络发送的消息最多只有 1 兆字节,那么这两者中的哪一个在内存、速度和性能方面更有效?
【问题讨论】:
-
第一种方法更好,因为您知道编码。 Ascii 编码将删除不可打印的字符。
-
@jdweng - Ascii 包含不可打印字符,它们可以(并且必须)通过 TCP 传输。
-
这不是 ASCII。它是二进制的,对二进制数据使用编码会破坏数据。必须发送字节数组或打包(如 64 位字符串)。
标签: c# networking tcp tcpclient