Рефакторинг сокета C # (отправка данных) - PullRequest
4 голосов
/ 13 декабря 2010

Представьте, что размер Byte[] refArchiveData составляет около 30-100 мегабайт. Я хочу отправить его на сервер, используя NetworkStream stream объект:

            TcpClient client = new TcpClient(server, port);

            Byte[] refLengthBytes = new Byte[4];
            Byte[] refArchiveData = null;

            refArchiveData = File.ReadAllBytes("C:/Temp/Python25.zip");

            Console.WriteLine("Archive data length is {0}", refArchiveData.Length);

            NetworkStream stream = client.GetStream();

            refLengthBytes = System.BitConverter.GetBytes(refArchiveData.Length);

            stream.Write(refLengthBytes, 0, 4);

            stream.Write(refArchiveData, 0, refArchiveData.Length);

            stream.Close();

            client.Close();

Как мне изменить часть кода, куда я отправляю свой архив? Может быть, разбить его на куски 256-512 байт?

Спасибо за любой совет!

1 Ответ

7 голосов
/ 13 декабря 2010

Используйте метод Stream.CopyTo .Таким образом, вам не нужно загружать весь файл в массив (в память).

using (var file = File.OpenRead("<path to file>"))
using (var client = new TcpClient("<server>", <port>))
using (var netStream = client.GetStream())
{
    ...
    file.CopyTo(netStream);
    ...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...