【发布时间】:2014-09-07 17:13:52
【问题描述】:
我是 C# 的相对论新手。在我的 TCP 客户端中,有以下函数将数据发送到服务器并返回响应:
private static TcpClient tcpint = new TcpClient(); //Already initiated and set up
private static NetworkStream stm; //Already initiated and set up
private static String send(String data)
{
//Send data to the server
ASCIIEncoding asen = new ASCIIEncoding();
byte[] ba = asen.GetBytes(data);
stm.Write(ba, 0, ba.Length);
//Read data from the server
byte[] bb = new byte[100];
int k = stm.Read(bb, 0, 100);
//Construct the response from byte array to string
StringBuilder sb = new StringBuilder();
for (int i = 0; i < k; i++)
{
sb.Append(bb[i].ToString());
}
//Return server response
return sb.ToString();
}
正如您在此处看到的,当我从服务器读取响应时,我将其读入一个长度为 100 字节的固定 byte[] 数组。
byte[] bb = new byte[100];
int k = stm.Read(bb, 0, 100);
如果服务器的响应超过 100 字节,我该怎么办?在我不知道服务器数据的最大长度的情况下如何读取数据?
【问题讨论】:
-
可以先发送数据长度再发送数据,或者使用数据中不存在的分隔符
-
@L.B 哦,好吧,这有点道理。所以我会有两个读取操作。第一个将获得数据长度。第二个将根据第一次读取操作中给出的长度获取实际数据。对吗?
-
但是,如果你的字符串不包含换行符,使用
var reader = new StreamReader(tcpint.GetStream());会更容易(另外还有StreamWriter)。这样,你只需要reader.ReadLine()或writer.WriteLine()
标签: c# tcp bytearray tcpclient