Отправка изображения по сети с помощью сокетов, испорченные данные - PullRequest
1 голос
/ 06 марта 2012

У меня проблемы с отправкой следующего файла изображения размером 140 КБ по сети с использованием сокетов:

original image

Начало файла передается правильно, затем все остальное путаетсяприводя к следующему результату:

messed up image

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

Все данные на стороне сервера собираются в байтовом списке (GLOBAL.FILE_BUFFER) перед записью в файл:

public void OnDataReceived(IAsyncResult asyn)
    {
        try
        {
                SocketPacket socketData = (SocketPacket)asyn.AsyncState; 
                int iRx = socketData.m_currentSocket.EndReceive(asyn);

                for (int f = 0; f < iRx; f++)
                {
                    GLOBAL.FILE_BUFFER.Add(socketData.dataBuffer[f]); // Collect all the incoming data into a buffer
                }

                WaitForData(socketData.m_currentSocket, socketData.socket_id, REQUEST_INDEX_ID);
        }
        catch (ObjectDisposedException)
        {

        }
        catch (SocketException se)
        {

        }
    }

Это код, который я использую для записив файл:

     public static void ByteArrayToFile(string _FileName, byte[] _ByteArray, int BytesRead)
     {
         System.IO.FileStream _FileStream = new System.IO.FileStream(_FileName,  System.IO.FileMode.Create, System.IO.FileAccess.Write);
         _FileStream.Write(_ByteArray, 0, BytesRead);
         _FileStream.Close();
     }

Я использовал ту же функцию ByteArrayToFile на стороне cient, и он сохранил изображение правильно.Похоже, что клиент отправляет правильные данные, но когда сервер получает их, они портятся.Я сохранил файл на обоих концах, по клиенту и по серверу, а затем сравнил их:

enter image description here

Обратите внимание на фиолетовую линию / полосу внизу в центре.Это указывает на то, что данные там не совпадают, но обратите внимание, что они идеально совпадают в началепока нечего читать !?Если у вас нет решения, можете ли вы дать мне какие-нибудь советы, пожалуйста ?!Эта проблема беспокоила меня в течение нескольких недель, я бы хотел, чтобы ее окончательно выяснили.Спасибо!

1 Ответ

1 голос
/ 06 марта 2012

Можете ли вы сказать из сравнения данных, в чем проблема? Сервер просто сбрасывает байты или данные повреждены? Сколько данных передается правильно?

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

...