Дед Winsock и файлы :-)

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Tarik
Агент Системы
Агент Системы
Аватара пользователя
 
Сообщения: 1222
Зарегистрирован: 03.01.2003 (Пт) 16:05
Откуда: Москва

Дед Winsock и файлы :-)

Сообщение Tarik » 31.03.2003 (Пн) 16:44

Подскажите плиз, как перекачивать файлы по Winsock? Желательно поподробнее.
Изображение

Ever tried? Ever failed? No matter. Try again! Fail again! Fail better!

Amed
Алфизик
Алфизик
 
Сообщения: 5346
Зарегистрирован: 09.03.2003 (Вс) 9:26

Сообщение Amed » 31.03.2003 (Пн) 18:38

Давай скину пример на мыло... В zip или rar?

sanches
El compañero
El compañero
 
Сообщения: 823
Зарегистрирован: 09.01.2003 (Чт) 3:58
Откуда: Р_О_С_С_И_Я ! (Питер)

Сообщение sanches » 31.03.2003 (Пн) 19:56

есть у меня свой пример, но после того, как я увидел это - мой оказался полной фигней (ну почти фигней :D )
Изображение

Amed
Алфизик
Алфизик
 
Сообщения: 5346
Зарегистрирован: 09.03.2003 (Вс) 9:26

Сообщение Amed » 01.04.2003 (Вт) 18:47

Вот файл:

X-BOND
Реалист
Реалист
 
Сообщения: 944
Зарегистрирован: 19.08.2002 (Пн) 11:44
Откуда: Ukraine

Сообщение X-BOND » 15.04.2003 (Вт) 11:58

Посмотрел я этот примерчик...
Даже испытывать не стал. Попробуйте переслать графику. Интересно, что получится. :D
Да, кстати, у Winsock есть ограничение (не помню точно, вроде около 5Kb) размера пересылаемого блока.

Firestorm
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 946
Зарегистрирован: 02.05.2002 (Чт) 14:36
Откуда: Russia

Сообщение Firestorm » 15.04.2003 (Вт) 12:09

где-то видал еще примерчик на vbnet.ru...
всё должно работать нормально...
X-BOND писал(а):Да, кстати, у Winsock есть ограничение (не помню точно, вроде около 5Kb) размера пересылаемого блока.

и чё ты этим хочешь сказать? :roll:
...просто гламурный падонак...
_________________
reborn! v.2 :twisted:
_________________

X-BOND
Реалист
Реалист
 
Сообщения: 944
Зарегистрирован: 19.08.2002 (Пн) 11:44
Откуда: Ukraine

Сообщение X-BOND » 15.04.2003 (Вт) 12:17

Да просто если файл будет больше этого размера, данный пример отправит только этот блок. И размер полученного файла будет не соответствовать оригиналу. :wink:

X-BOND
Реалист
Реалист
 
Сообщения: 944
Зарегистрирован: 19.08.2002 (Пн) 11:44
Откуда: Ukraine

Сообщение X-BOND » 15.04.2003 (Вт) 13:12

Да просто если файл будет больше этого размера, данный пример отправит только этот блок. И размер полученного файла будет не соответствовать оригиналу. :wink:

Amed
Алфизик
Алфизик
 
Сообщения: 5346
Зарегистрирован: 09.03.2003 (Вс) 9:26

Сообщение Amed » 15.04.2003 (Вт) 19:00

Даа... А решение в голову сразу не приходит?
Имхо: грузим файл в String, затем разбиваем String на куски по 5 кБайт и поочерёдно их посылаем... :lol:

P.S. Пример написан для примера, это ведь не готовое приложение %)

X-BOND
Реалист
Реалист
 
Сообщения: 944
Зарегистрирован: 19.08.2002 (Пн) 11:44
Откуда: Ukraine

Сообщение X-BOND » 16.04.2003 (Ср) 8:55

Но в том и проблема, что "грузим в string".
Бинарные файлы таким способом передать не удастся.[/b]

Amed
Алфизик
Алфизик
 
Сообщения: 5346
Зарегистрирован: 09.03.2003 (Вс) 9:26

Сообщение Amed » 16.04.2003 (Ср) 18:39

Хмм.. Почему же не получится? Разве я не могу сделать так:
1) Определяю размер файла с помощью Windows API
2) В цикле побайтно загружаю файл в String:
For i = 1 to FILE_SIZE-1
put #1, i, tmp
Data=Data & cstr(chr(tmp))
Next i
3) В цикле разбиваю String на куски по 5 кбайт и поочерёдно их посылаю...
4) В клиенте собираю куски файла, склеиваю их и пишу в файл...

??? Может, я неправ и это невозможно ???

X-BOND
Реалист
Реалист
 
Сообщения: 944
Зарегистрирован: 19.08.2002 (Пн) 11:44
Откуда: Ukraine

Сообщение X-BOND » 16.04.2003 (Ср) 20:31

Я тоже так думал. Но в переменной String теряются определенные байты. (вроде все до 32).

Вот фрагмент моего кода:

Код: Выделить всё
Sub SendFile(ByVal FN As String, ByVal StartPos As Long)
Dim FL As Long, POS As Long, LB As Integer, TB As Long, LP As Long
Dim TMP As String, TimeOut As Single
Dim R() As Byte  ' !!!
Dim P As Long
Dim B As Integer

On Error GoTo 1

B = Val(OPT(6))
P = Val(OPT(5))

Close #1: Open FN For Binary Access Read As #1

FL = LOF(1)
LB = FL Mod B - 1
LP = FL - LB

SendDATA "SENDFILE:" & LTrim$(Str$(FL)), "&"

If WAD = 1 Then
ReDim R(B) As Byte
Else: GoTo E
End If

For POS = 1 To FL Step B

R:
If POS >= LP Then
ReDim R(LB) As Byte
Get #1, POS, R
Else: Get #1, POS, R
End If

SendDATA LTrim$(Str$(POS)), "#"

If WAD <> 1 Then GoTo E

SendDATA R

Select Case WAD
Case 2: GoTo R
Case 0, 3: GoTo E
End Select

Next POS

SendDATA "EOF:" & FN, "&"

E:
Close

Exit Sub
1:: Close: ErrINT


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

Но главное, что пересылать бинарные данные можно только в переменной типа Byte
[/code]

Amed
Алфизик
Алфизик
 
Сообщения: 5346
Зарегистрирован: 09.03.2003 (Вс) 9:26

Сообщение Amed » 16.04.2003 (Ср) 21:04

2X-BOND Ох! А я и не знал... Спасибо за разъяснение :)

v-adix
Постоялец
Постоялец
 
Сообщения: 490
Зарегистрирован: 14.11.2002 (Чт) 15:11

Сообщение v-adix » 20.04.2003 (Вс) 18:17

вот мой пример
может кому нибудь пригодится...
Вложения
winsockfiletransfer.zip
(11.68 Кб) Скачиваний: 119

GoGosha
Постоялец
Постоялец
 
Сообщения: 642
Зарегистрирован: 02.08.2002 (Пт) 9:14
Откуда: Russia

Сообщение GoGosha » 21.04.2003 (Пн) 15:45

X-BOND писал(а):Я тоже так думал. Но в переменной String теряются определенные байты. (вроде все до 32).
[/code]


Вот код, который сведетельствует, что никакие байты в String переменных НЕ теряются

Код: Выделить всё
Private Sub Form_Load()
    Do
        Dim Str As String
        Dim Numb As Byte
       
        Randomize
       
        Numb = Rnd * 32
       
        MsgBox Numb, , "Номер символа"
       
        Str = Chr(Numb)
        MsgBox Asc(Str), , "Номер символа после хранения в String переменной"
    Loop
End Sub

X-BOND
Реалист
Реалист
 
Сообщения: 944
Зарегистрирован: 19.08.2002 (Пн) 11:44
Откуда: Ukraine

Сообщение X-BOND » 22.04.2003 (Вт) 10:18

Возможно, на счет String я ошибся.
Но приведите здесь кто-нибудь реально работающий код по пересылке бинарных данных с помощью переменной String

Tarik
Агент Системы
Агент Системы
Аватара пользователя
 
Сообщения: 1222
Зарегистрирован: 03.01.2003 (Пт) 16:05
Откуда: Москва

Сообщение Tarik » 24.04.2003 (Чт) 14:15

Спасибо за подробный ликбез... Извиняюсь, что не участвовал в дискуссии :lol: . Просто Инет кончился.
Изображение

Ever tried? Ever failed? No matter. Try again! Fail again! Fail better!


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

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

Сейчас этот форум просматривают: Yandex-бот и гости: 135

    TopList