none
Несовпадение файлов при передаче через TCP; RRS feed

  • Вопрос

  • Дано: клиент на as3, сервер на C#. Оба соединяются через tcp сокеты и передают друг-другу файлы. Передаются прекрасно, длина исходного файла совпадает с результирующем, но есть один нюанс. На сервере данные принимаются обычным зацикленным потоком, который проверяет сокет на наличие доступных данных.

    private void readingDataLoop(){
                while (true){
                    try { if (dataC != null) if (dataC.Client.Poll(10, SelectMode.SelectRead) && dataC.Client.Available == 0) dataR = false; }
                    catch { Console.WriteLine("lol 2"); }
                    if (dataR) {
                        while (dataC.Available > 0)
                            try {
                                byte[] buf = new byte[dataC.Available];
                                if (dataS.DataAvailable) dataS.Read(buf, 0, buf.Length);
                                new Thread(processDataBytes).Start(buf);
                            }
                            catch (Exception e) { Console.WriteLine("FU " + e.Message); return; }
                    }
                    else Thread.Sleep(100);
                    if (!instR && !dataR) return;
                }
            }

    Но по факту результирующие файлы повреждены. При попытке передачи фото, результирующее фото будет содержать в себе помехи и искажения, но длина файла фото совпадает с исходной. Для примера создал текстовый документ и вставил 2000 строк одного и того же текста: "Сорока-ворона кашку варила. Этому дала, этому дала, всем дала, гуляй честной надор, Сорока всем дает". В результате получилось ~250 кб текста. после передачи длины файлов так же совпали, но в некоторых строках встречается урезаный или искаженный текст: "Сорока-ворона кашку варила. Этому дарока всем дает" ну и далее в том же духе. В текстовом файле в 2000 строк подобные искажения встречаются примерно каждую 50-100 строку. С чем это может быть связано?

    6 июля 2012 г. 15:20

Ответы

Все ответы