Здесь есть три проблемы.
Сначала вы извлекаете текст из всего массива , независимо от того, сколько байт вы действительно получили. Скорее всего, это источник ваших нулевых символов.
Чтобы исправить это, измените код следующим образом:
int actuallyRead = ns.Read(instream, 0, tc.ReceiveBufferSize);
string decodedData = Encoding.ASCII.GetString(instream, 0, actuallyRead);
Во-вторых, вам нужно закрыть поток, чтобы он очистил его содержимое. Лучший способ сделать это - обернуть его в using
блок:
using (StreamWriter sw = new StreamWriter("c:\\a\\ta.txt"))
{
... rest of your code here
}
В-третьих, код обычно никогда не завершается. Добавьте способ его завершения, не полагаясь на обработку исключений, например:
int actuallyRead = ns.Read(instream, 0, tc.ReceiveBufferSize);
if (actuallyRead == 0)
break;
string decodedData = Encoding.ASCII.GetString(instream, 0, actuallyRead);