Отправка и получение изображения по сокетам с C#

Эти файлы являются папками bin и obj, которые являются выходными данными сборки. Поскольку они представляют собой выходные данные сборки, они будут меняться при каждом запуске сборки, и не следует проверять в .

Другая папка - это папка .vs, которая содержит индивидуальные данные для вашего компьютера о ваших предпочтениях, настройках и некоторых других вещах, связанных с этим решением. Это также не должно быть зарегистрировано.

Просто удалите их из репозитория и добавьте папки в файл .gitignore.

13
задан 15 April 2009 в 01:37
поделиться

4 ответа

ArgumentException сообщает, что формат изображения в потоке недопустим. Что, вероятно, вызвано тем, что клиентское приложение закрывает поток памяти перед отправкой данных.

Попробуйте заменить byte [] bmpBytes = ms.GetBuffer (); на

byte[] bmpBytes = ms.ToArray();

или закрыть поток после отправки данных.

Помните, что массив байтов, возвращаемый ] .GetBuffer () возвращает базовый массив, а не его копию ( .ToArray () возвращает копию), который действителен до тех пор, пока родительский поток.

8
ответ дан 1 December 2019 в 22:24
поделиться

Если у вас есть доступ к самому файлу JPG (как в примере), вы должны отправить байты файла, а не используйте классы Image / Bitmap. Читая файл JPG и перекодируя его в JPG, вы снижаете качество изображения и получаете ненужные накладные расходы. Вы можете использовать File.ReadAllBytes () , чтобы быстро получить полный байт [] или прочитать / отправить его по частям, если объем памяти ограничен.

5
ответ дан 1 December 2019 в 22:24
поделиться

Use Arul's code to get the data to send correctly -- you want .ToArray(), not .GetBuffer(). Then, you'll want to run the server's 'startListening' method on a background thread or you won't actually see anything (as the form thread will be busy running the server code. Try:

var t = new Thread(startListening);
t.IsBackground = true;
t.start();

In your Form_Load method instead of directly calling startListening in your constructor.

3
ответ дан 1 December 2019 в 22:24
поделиться

Лучшим способом отправки изображения было бы использование BinaryFormatter.

например, некоторые фрагменты из моего собственного кода для отправки изображения каждую секунду. ..

отправка:

        TcpClient client = new TcpClient();  
        try  
        {    
            client.Connect(address, port); 

            // Retrieve the network stream.  
            NetworkStream stream = client.GetStream();  
            MessageData data = new MessageData(imageToSend); 

            IFormatter formatter = new BinaryFormatter();

            while(true)
            {
                formatter.Serialize(stream, data);
                Thread.Sleep(1000);
                data.GetNewImage();
            }    
        } 

получение:

5
ответ дан 1 December 2019 в 22:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: