Отсылка бинароного файла в WinSock

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

Отсылка бинароного файла в WinSock

Сообщение next » 27.06.2004 (Вс) 22:35

Подскажите как послать файл через WinSock. Файл бинарный. Если шлешь побайтно, то скорость очень маленькая:
dim rem as byte

sendData rem, binary
Вопрос как это делает NetMeeting иные проги работающие через протокол TCP/IP.

GM
programador
programador
 
Сообщения: 1427
Зарегистрирован: 24.06.2003 (Вт) 15:56
Откуда: 194.67.52.100

Сообщение GM » 28.06.2004 (Пн) 2:03

Если не ошибаюсь. :roll: Считываеш бинарный файл в массив. А потом отсылаеш его:
Код: Выделить всё
dim a() as byte
...
процедура считывания
...
Call WinSock1.senddata (a)

EvilCoder
Посланец джихада
Посланец джихада
Аватара пользователя
 
Сообщения: 706
Зарегистрирован: 25.01.2004 (Вс) 15:08

Сообщение EvilCoder » 28.06.2004 (Пн) 12:21

:arrow: <DELETE> :twisted: :twisted:
Последний раз редактировалось EvilCoder 25.08.2006 (Пт) 14:54, всего редактировалось 1 раз.
<<------- EvilCoder ------->>

sash
Начинающий
Начинающий
 
Сообщения: 23
Зарегистрирован: 17.05.2003 (Сб) 3:37

Сообщение sash » 30.06.2004 (Ср) 21:54

EvilCoder, твой вариант сработает тока если файл не больше 8кб - это максимальный размер пакета!

Я делал так :
Код: Выделить всё
Private Sub SendInfo(ByVal FilePath As String)
    Dim fNum As Integer
    Dim buff As String
    Dim nLoop As Long
    Dim nRem  As Long
    Dim nCount As Long
    Dim lnFile As Long
   
    ws.SendData "get_file"
   
    While rec = False
        DoEvents
    Wend
    fNum = FreeFile
   
    Open FilePath For Binary As fNum
    lnFile = FileLen(FilePath)
    If lnFile <> 0 Then
        If lnFile > 1024 Then
            nLoop = Fix(lnFile / 1024)
            nRem = lnFile Mod 1024
        Else
            nLoop = 0
            nRem = lnFile
        End If
        If nLoop > 0 Then
            For nCount = 1 To nLoop
                buff = String$(1024, " ")
                Get #fNum, , buff
                ws.SendData buff               
                rec = False
                While rec = False
                    DoEvents
                Wend
            Next
            If nRem > 0 Then
                buff = String$(nRem, " ")
                Get #fNum, , buff
                ws.SendData buff
                rec = False
                While rec = False
                    DoEvents
                Wend
            End If
        Else
            buff = String$(nRem, " ")
            Get #fNum, , buff
            ws.SendData buff
            rec = False
            While rec = False
                DoEvents
            Wend
        End If
    End If
    ws.SendData "get_eof"
    Close #fNum
End Sub

EvilCoder
Посланец джихада
Посланец джихада
Аватара пользователя
 
Сообщения: 706
Зарегистрирован: 25.01.2004 (Вс) 15:08

Сообщение EvilCoder » 30.06.2004 (Ср) 22:51

:arrow: <DELETE> :twisted: :twisted:
Последний раз редактировалось EvilCoder 25.08.2006 (Пт) 14:56, всего редактировалось 1 раз.
<<------- EvilCoder ------->>

next
Обычный пользователь
Обычный пользователь
 
Сообщения: 59
Зарегистрирован: 26.03.2002 (Вт) 23:01

Сообщение next » 09.07.2004 (Пт) 12:03

Спасибо, за ответ. Но у меня встречный вопрос, какой код нужен для приема файла в обработке события DataArrival для WskGet, чтобы принять файл при отсылки его способом Sash.

EvilCoder
Посланец джихада
Посланец джихада
Аватара пользователя
 
Сообщения: 706
Зарегистрирован: 25.01.2004 (Вс) 15:08

Сообщение EvilCoder » 09.07.2004 (Пт) 16:10

:arrow: <DELETE> :twisted: :twisted:


Код: Выделить всё
Public bolDownFile As Boolean
Public FileByte As String
'-------------------------------------------------------
Private Sub Socket_DataArrival(ByVal bytesTotal As Long)
If bolDownFile Then                                     ' Если происходит загрузка, то
    DownloadECFT                                        ' передача в DownFile
    Exit Sub                                            ' выход
End If
    Dim sData As String
    Socket.GetData sData
    If sData = "%downfile%" then  bolDownFile = True    ' Загрузка файла
End Sub
'-------------------------------------------------------

Sub DownloadECFT()                                      ' Процедура загрузки файла
    Dim ByteString As String                            ' Получ. Строка...
    Socket.GetData ByteString                           ' загрузка 1ого пакета Байт
    If Right$(ByteString, 5) = "%end%" Then GoTo trEnd  ' если Это послед. пакет, то Конец Загрузки
    FileByte = FileByte & ByteString                    ' Если нет, то Соеденяем все получ пакеты
    Socket.SendData LenB(ByteString) / 2 & " Bytes received"    ' Получ. байт
Exit Sub
trEnd:                                                  ' конец зыгрузки... Последний пакет
    FileByte = FileByte & Left$(ByteString, Len(ByteString) - 5)    ' отрезаем "%end%"
    socket.SendData "-->>  Total Received  bytes - " & CStr(LenB(FileByte) / 2) & vbCrLf
    WriteFile FileByte, "D:\Down.dwn"                   ' пишем в файл все ПАКЕТЫ (файл)
    Open "D:\Down.dwn" For Binary Access Write As #1
        Put #1, , FileByte                            ' запись
    Close
    FileByte = vbNullString
    bolDownFile = False                                 ' загрузка завершена
End Sub
<<------- EvilCoder ------->>


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

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

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

    TopList