Страница: 1 | 2 |
Вопрос: File transfer / help me please /
Добавлено: 04.10.04 21:32
Автор вопроса: Alexander
Народ спасайте нужно быстро и безглючно предельно компактно (как для первоклассника) описать как переслать файл нормальных размеров (до 15 мб) по сети где 1 мб/10 мин, просьба не слать в примеры ниче не понял че понял то забыл, если точно то описать как нарезать файл чтоб винсок понял и как склеить, клиент сервер это уже ясно,
а то хексом и бинарником как то матерно и муторно получается...
Ответы
Всего ответов: 18
Номер ответа: 1
Автор ответа:
AgentFire
ICQ: 192496851
Вопросов: 75
Ответов: 3178
Профиль | | #1
Добавлено: 04.10.04 22:54
А пошел ты ... В примеры
Ладно, шучу... )
Везде нужен Винсок(WS)
SERVER:
[CODE]
Sub Form_Load
WS.LocalPort=999
End Sub
Sub WS_ConnectionRequvirest(requvID as long)
WS.Accept requvID
End Sub
Sud WS_DataArrival(<какие то параметры>)
Dim St as string
WS.GetData St
If (St="FI ")and(Len(St)>3) then
Open "C:\" & right(st,len(st)-3) For Binary As #1
ElseIf St="End" then
close #1
ws.close
else
Put #1, ,St
End If
End Sub
[/CODE]
CLIENT:
Нужно cmdSend и txtSend(путь файла),txtFile(имя файла)
[CODE]
Sub cmdSend_Click()
Dim St as string
WS.Connect <RemoteIP>,999
DoEvents
WS.SendData "IF " & txtFile
Open txtSend For binary As #1
Do While Not EOF(1)
Get #1,,St
WS.SendData St
Doevents
Loop
ws.SendData "END"
doevents
Close
End Sub
[/CODE]
Ну как?
Номер ответа: 2
Автор ответа:
DaSharm
ICQ: 780477
Вопросов: 72
Ответов: 1297
Web-сайт:
Профиль | | #2
Добавлено: 05.10.04 16:05
Вол первых, пересылать по одному байту это зверство, потому, что если додать вес АйПи+ТСР пакета то получиться траффик в 8-32 раза больше размера файла. Если же добавить:
St=String(LOF(1), vbNullChar)
То файла прочитаеться за один заход, но будут другие ошибки в коде, пример не будет работать в реальной сети.
Допустим, файл приходит по 100 кб за раз. Общий вес файла - 1 мб.
Значит к нам прийдет 10 раз 100 кб.
Смотрим на код:
Put #1, ,St
Выходит что файл 10 раз перезапишеться разными 100 кб данными и в итоге будет весить 100 кб вместо 1 мб. Выход: подстчёт количества пришедших данных и делать так:
BytesCount=BytesCount+len(St)
Put #1,BytesCount ,St
Номер ответа: 3
Автор ответа:
Barsik
Разработчик Offline Client
ICQ: 343368641
Вопросов: 17
Ответов: 686
Web-сайт:
Профиль | | #3
Добавлено: 05.10.04 17:03
а еси резать по 500кб или по 1мб..
оптимальный вариант
Номер ответа: 4
Автор ответа:
Alexander
Вопросов: 19
Ответов: 118
Профиль | | #4
Добавлено: 05.10.04 18:46
Народ не грузите, я еше с первым комментом не до конца разобрался, этот XP говорит что мол винда сделала непопровимую ошибку и через шесят секунд склеит ласты, по этой причине сохранитесь( сохранять к стати нечего все вылетает ) и ждите
ну это ладно, так там еще говорит что GET #1, , st это не Бейсиковский код!!!
в итоге:
Open txtSend For binary As #1
Do While Not EOF(1)
Get #1,,St
WS.SendData St
 oevents
Loop
ws.SendData "END"
doevents
Close
ваще говорит что файла к примеру "C:\AUTOEXEC.BAT" вообще не существует!!!
хотя я неоднократно проверял ОН ТАМ ЕСТЬ!!!
кстати коммент к ответу barsik а что если сеть сидит на хорошем модеме ZyXEL и старом как мир Acorp rockwell я конечно знаю что они оба живучие, но вы знаете что такое РЕЛЕЙНО АНАЛОГОВАЯ телефонная линия, там без ошибки килобайт не перешлеш...
Номер ответа: 5
Автор ответа:
Alexander
Вопросов: 19
Ответов: 118
Профиль | | #5
Добавлено: 05.10.04 19:01
И еще у меня Acorp ( но линия новейшая цифровая )
а ZyХЕЛЬ у друга но линия ...... Брррррр
она заслуживает мата!!!
я ведь просто просил написать как считать EXE файл в бинаре в память и записать в другом месть с другими параметрами ( но ради бога не говорите про File copy ) просто скажите а как проверять пакеты это я проверю ( в моем ВБ образовании раздел работа с файлами не существует по причине отсутствия литературы и тогда еще интернета... так что валюсь на элементарщине )...
Номер ответа: 6
Автор ответа:
DaSharm
ICQ: 780477
Вопросов: 72
Ответов: 1297
Web-сайт:
Профиль | | #6
Добавлено: 06.10.04 15:28
Блин...Вот на те исходник на VBSocket1.1
------klient------
Private Sub Command1_Click()
T1.Connect "127.0.0.1", 237
End Sub
Private Sub T1_Connected(IP As String, port As Long)
 im AllFile As String
Open "C:\original.exe" For Binary As #1
AllFile = String(LOF(1), vbNullChar)
Get #1, , AllFile
Close #1
T1.SendData AllFile
T1.CloseConnection
End Sub
--------server-----
Dim FilePointer As Long, BytePointer As Long
Private Sub Form_Load()
T1.Listen 237
End Sub
Private Sub T1_Accepted(IP As String)
BytePointer = 1
FilePointer = FreeFile
Open ":\copy.exe" For Binary As FilePointer
End Sub
Private Sub T1_ConnectionClosed()
Close FilePointer
End Sub
Private Sub T1_DataArrival(Data As String)
Put FilePointer, BytePointer, Data
BytePointer = BytePointer + Len(Data)
End Sub
Сам VBSocket1.1 могу выслать по почте (официально он ещё не вышел, на моем сайте его нет)
Номер ответа: 7
Автор ответа:
AgentFire
ICQ: 192496851
Вопросов: 75
Ответов: 3178
Профиль | | #7
Добавлено: 06.10.04 15:36
Вышли мне, пожалуйста.
[mailto:NoviksPlavnik@mail.ru]
Номер ответа: 8
Автор ответа:
DaSharm
ICQ: 780477
Вопросов: 72
Ответов: 1297
Web-сайт:
Профиль | | #8
Добавлено: 06.10.04 17:08
Выслал. Версия тестовая, но, думаю, глюков нет.
Номер ответа: 9
Автор ответа:
Barsik
Разработчик Offline Client
ICQ: 343368641
Вопросов: 17
Ответов: 686
Web-сайт:
Профиль | | #9
Добавлено: 06.10.04 17:31
и мне зашли... barsik_nk@rambler.ru
Номер ответа: 10
Автор ответа:
Barsik
Разработчик Offline Client
ICQ: 343368641
Вопросов: 17
Ответов: 686
Web-сайт:
Профиль | | #10
Добавлено: 06.10.04 17:33
ну тогда по 10кб шли а потом клей ...
Номер ответа: 11
Автор ответа:
Barsik
Разработчик Offline Client
ICQ: 343368641
Вопросов: 17
Ответов: 686
Web-сайт:
Профиль | | #11
Добавлено: 06.10.04 17:36
или вообще используй стандартный Виндосовский пересыльщик...
Номер ответа: 12
Автор ответа:
ZagZag
ICQ: 295002202
Вопросов: 87
Ответов: 1684
Профиль | | #12
Добавлено: 06.10.04 17:46
И мне, и мне!
Номер ответа: 13
Автор ответа:
DaSharm
ICQ: 780477
Вопросов: 72
Ответов: 1297
Web-сайт:
Профиль | | #13
Добавлено: 07.10.04 17:37
Выслал
Номер ответа: 14
Автор ответа:
DaSharm
ICQ: 780477
Вопросов: 72
Ответов: 1297
Web-сайт:
Профиль | | #14
Добавлено: 07.10.04 18:42
на рамдлер.ру мыло не высылается. Ждите пока я на сайт загружу контрол или дайте альтернативный емайл
Номер ответа: 15
Автор ответа:
Barsik
Разработчик Offline Client
ICQ: 343368641
Вопросов: 17
Ответов: 686
Web-сайт:
Профиль | | #15
Добавлено: 11.10.04 20:50
пжалуста... er_andrew@mail.ru