И снова неумирающая тема Винсока

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Kiryusha
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 216
Зарегистрирован: 30.08.2005 (Вт) 10:56
Откуда: УР, Ижевск

И снова неумирающая тема Винсока

Сообщение Kiryusha » 15.05.2006 (Пн) 20:17

Начит моя прога делает следующее:

-сохраняю на одном компе jpg файл
-закидываю его через цикл и байтовую переменную в строку
-отправляю по винсоку на другой комп
-там опять данные сую в jpg файл
-открываю пикчербоксом этот файл

Проблема в следующем, файл который я получаю не всегда идентичный тому, который я отправляю, то есть он приходит какой-то корявый, причем это более заметно если jpg большего размера. Почему такое может происходить? Ну на всякий вот код получения файла на втором компе:

Код: Выделить всё

Private Sub wskClient_DataArrival(ByVal bytesTotal As Long)
On Error Resume Next
    Dim strData As String
    Dim strWork As String
    Dim BT As Long
   
    wskClient.GetData strData, vbString
   
    BT = bytesTotal
   
    While strData <> ""
        If bytesNeed = 0 Then
            bytesNeed = Val(Mid(strData, 1, InStr(strData, Chr(0)) - 1))
            strData = Mid(strData, InStr(strData, Chr(0)) + 1)
            BT = BT - Len(CStr(bytesNeed)) - 1
        End If
       
        If bytesNeed >= BT Then
            bytesNeed = bytesNeed - BT
            strWork = strData
            strData = ""
        Else
            strWork = Mid(strData, 1, bytesNeed)
            strData = Mid(strData, bytesNeed + 1)
            bytesNeed = 0
            BT = Len(strData)
        End If
       
        Open App.Path & "\capture.jpg" For Append As #1
            Print #1, strWork
        Close #1
       
        If bytesNeed = 0 Then
            DoEvents
            picScreen.Picture = LoadPicture(App.Path & "\capture.jpg")
            Open App.Path & "\capture.jpg" For Output As #1
            Close #1
            bytetsget = 0
        End If
    Wend
End Sub


Так-с и заодно проблема тока уже по серверу, я картинки посылаю по таймеру и чем больше времени проходит тем медленнее отсылаются картинки, как-будто Interval постоянно растет. Вот. Всем спс.
Судебно-медицинское вскрытие показало, что чукча умер в
результате судебно-медицинского вскрытия.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 15.05.2006 (Пн) 21:46

Какой то у тебя мудрёный код, я даже не стал читать...

Короче предлагаю сделать так:
шлёшь сначала строку типа
"@XXXXXX"+Chr(1)

Где XXXX - размер JPEG файла

Потом начинаешь по кускам или полностью отсылать сам jpg.

На другой машине DataArrivel смотрит, если пришла пришла такая инфа:
"@XXXXXX"+Chr(1)
то запоминает (например в переменную jpegFileLengh) длину нужного файла.

Если же приходит что-то другое то это всё просто прибавляется к FileBuffer (As String), причём при каждом DataArrivel смотрим, если Len(FileBuffer) достигло значения XXXXXX, то записываем FileBuffer в JPEG-файл. Опустошаем FileBuffer и сбрасываем jpegFileLengh

Вот так...
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Kiryusha
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 216
Зарегистрирован: 30.08.2005 (Вт) 10:56
Откуда: УР, Ижевск

Сообщение Kiryusha » 16.05.2006 (Вт) 12:21

Хакер, спасибо, конечно, за то, что ты не поленился столько написать ;) только если ты присмотришься к моему коду, то я именно это и делаю (если конечно я тебя правильно понял). Ладно тогда сейчас объясню свой код не столь он и мудреный:

Во-первых цикл я сделал для случаев когда сцепятся несколько разных файлов, во-вторых про переменные:

bytesNeed - собственно и есть размер очередного файла;
BT - это длина оставшейся в работе строки strData;
strWork - строка с данными относящимися к очередной картинке;
ну strData - это строка с данными.

То есть строку я посылаю следущим форматом: XXXX + chr(0) + DDDD
XXXX - длина файла
DDDD - байты картинки.
Судебно-медицинское вскрытие показало, что чукча умер в
результате судебно-медицинского вскрытия.

Kiryusha
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 216
Зарегистрирован: 30.08.2005 (Вт) 10:56
Откуда: УР, Ижевск

Сообщение Kiryusha » 16.05.2006 (Вт) 18:12

Вобщем что я узнал, что сами сообщения, которые я пересылаю они не портятся, то есть я проверил их по каждому числу, и две картинки идентичны, однако одна отображается верно а вторая нет.
Тогда вопрос может вот так делать нельзя:
Код: Выделить всё
            Open App.Path & "\capture.jpg" For Binary As #1
                    For i = 1 To FileLen(App.Path & "\capture.jpg")
                        DoEvents
                        Get #1, i, binData
                        s = s + Chr(binData)
                    Next i
            Close #1


Я идиот! Убейте меня, кто-нибудь!Я идиот! Убейте меня, кто-нибудь!? Может при такой записи что-то теряется Я идиот! Убейте меня, кто-нибудь!Я идиот! Убейте меня, кто-нибудь!?
Помогите плз
Судебно-медицинское вскрытие показало, что чукча умер в
результате судебно-медицинского вскрытия.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 16.05.2006 (Вт) 18:14

Может быть у тебя как сплиттеры стоят какие нибудь символы типа chr(0).

Попробуй делать хекс дамп, и пересылать его, а потом обратно из дампа, получать файл.

ЗЫ. Объём передаваемой инфы увеличится при этом в 2р
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Kiryusha
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 216
Зарегистрирован: 30.08.2005 (Вт) 10:56
Откуда: УР, Ижевск

Сообщение Kiryusha » 16.05.2006 (Вт) 18:17

Так-с насчет chr(0) у меня стоят это ты прав, но они у меня стоят только после указания длины строки и после они отрезаются (см. код проги в 1 посте). И поподробнее что такое хекс дамп плз.
Судебно-медицинское вскрытие показало, что чукча умер в
результате судебно-медицинского вскрытия.

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 16.05.2006 (Вт) 18:17

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

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 16.05.2006 (Вт) 18:20

Код: Выделить всё
                        DoEvents
                        Get #1, i, binData
                        s = s + Chr(binData)

А binData недеюсь Dim As Byte
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 16.05.2006 (Вт) 18:23

Да и кстати...

файл читать надо так:

Код: Выделить всё
Open "file.dat" for Binary As #1
Dim FileInnerData As String
FileInnerData = Space(LOF(1))
Get #1,1,FileInnerData

Close #1



А так ты 2 дня его читать будешь...
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Kiryusha
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 216
Зарегистрирован: 30.08.2005 (Вт) 10:56
Откуда: УР, Ижевск

Сообщение Kiryusha » 16.05.2006 (Вт) 18:41

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

Хакер 1) на счет binData можешь не беспокоиться она As Byte ;)
2) ну не знаю у меня моим способом читает достаточно быстро хотя приму к сведению спс.

Однако по существу проблемы почему то я не вижу никаких предложений.
Судебно-медицинское вскрытие показало, что чукча умер в
результате судебно-медицинского вскрытия.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 16.05.2006 (Вт) 18:44

Хекс дамп, попробуй, вдуг поможет
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Kiryusha
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 216
Зарегистрирован: 30.08.2005 (Вт) 10:56
Откуда: УР, Ижевск

Сообщение Kiryusha » 16.05.2006 (Вт) 18:46

Объясни плз что это такое и с чем его едят
Судебно-медицинское вскрытие показало, что чукча умер в
результате судебно-медицинского вскрытия.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 16.05.2006 (Вт) 19:00

А это вот что

берём строку

"ABC"

=> ASCII => 65 66 67

терерь переводим 65,66, и 67 в HEX это будет &H41, &H42, &H43

так вот передаёшь 414243

А будет строка "fila"+chr(0)

Будешь передовать
66696с6100

таким образом нульсимвол никогда не придёт случайно, кроме тех случаев когда ты его сам отправил
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Kiryusha
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 216
Зарегистрирован: 30.08.2005 (Вт) 10:56
Откуда: УР, Ижевск

Сообщение Kiryusha » 16.05.2006 (Вт) 19:06

Мдее... конечно тот еще способ, просто хакер, мой собственнный chr(0) передается исключительно сразу после длины и по instr(s,chr(0)) насколько я все это представляю никакой другой кроме как мой chr(0) передатся не может. Ну хотя сейчас попробуй сначала вообще убрать мой chr(0), а потом твой способ...
Судебно-медицинское вскрытие показало, что чукча умер в
результате судебно-медицинского вскрытия.

Kiryusha
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 216
Зарегистрирован: 30.08.2005 (Вт) 10:56
Откуда: УР, Ижевск

Сообщение Kiryusha » 16.05.2006 (Вт) 19:17

да, и кстати хакер, почему благодаря твоему коду вдруг таки не будет нулей кроме как моих? Например первая картинка, которую я отсылаю -почти черный экран, дк вот нулей там до и более. К тому же отправляю ведь я не числа, а символы (см. 4 пост)...
Судебно-медицинское вскрытие показало, что чукча умер в
результате судебно-медицинского вскрытия.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 16.05.2006 (Вт) 19:20

В данных jpeg файла запросто может быть chr(0)

Только учти что передавать надо в hexdump'е только сам файл
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Kiryusha
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 216
Зарегистрирован: 30.08.2005 (Вт) 10:56
Откуда: УР, Ижевск

Сообщение Kiryusha » 16.05.2006 (Вт) 19:25

дк в я и не спорю, ну смотри вот есть строка:

123XядладжлацуXываджлж

где под X понимается chr(0), дк я же сразу отрезаю в переменную длину находя ее по первому chr(0), то есть 123 отделится сразу и я еще убераю вместе с ней 1-ый chr(0) и все остается тока строка с данными, т.е.

ядладжлацуXываджлж

где также присутствует chr(0), или я что-то недопонимаю[/b]
Судебно-медицинское вскрытие показало, что чукча умер в
результате судебно-медицинского вскрытия.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 16.05.2006 (Вт) 19:56

Может быть если я не убью себя :D сделаю тебе экзампл, который будет пересылать файлы
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Kiryusha
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 216
Зарегистрирован: 30.08.2005 (Вт) 10:56
Откуда: УР, Ижевск

Сообщение Kiryusha » 16.05.2006 (Вт) 20:28

оО вот это уже тема :D хыы

Да лан вощем итак помог ;) спс щас буду ковырятся пока ничего не получается уже пробую рассылку по 1000 байт только, тока где-то ошибка в фомировании файла jpg ну с этим то я разберусь
Судебно-медицинское вскрытие показало, что чукча умер в
результате судебно-медицинского вскрытия.


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 44

    TopList