通过tcpListener发送编码为Byte数组的字符串,新的字符串长度与缓冲区大小相同

时间:2013-12-18 08:56:50

标签: c# tcplistener

我需要创建一个发送文本chucks的小应用程序。所以我使用tcpListener创建了一个服务器。在我的客户端,我使用tcpClient。

现在我的问题:

data = System.Text.Encoding.ASCII.GetBytes("test"); //length of "test" is 4.

现在我将这个字节数组发送到我的服务器应用程序。我在那里创建一个大小为320000字节的缓冲区数组。 (这里的大小无关紧要)

byte[] message = new byte[320000];
bytesRead = clientStream.Read(message, 0, 320000);
ASCIIEncoding encoder = new ASCIIEncoding();
string request = encoder.GetString (message);

现在这是我的问题,结果请求字符串的长度为320000.与我的字节数组大小相同。我确实理解为什么会这样,但是我能做些什么来缩小尺寸呢?现在我使用RegEx删除我将发送的所有字符串中永远不会出现的字符...但是必须有一个正确的方法...

任何帮助将不胜感激:)

专利

2 个答案:

答案 0 :(得分:1)

尝试更改:

string request = encoder.GetString(message);

string request = encoder.GetString(message, 0, bytesRead);

答案 1 :(得分:0)

通常的做法是使用一些永远不会出现在字符串中其他任何位置的标识符来表示它的结尾。

System.Text.Encoding.ASCII.GetBytes("test+++++++");

一切都会奏效,当你找到这个序列时(string.indexof(“+++++++”))只返回最终结果的子串。