Подскажите как послать файл через WinSock. Файл бинарный. Если шлешь побайтно, то скорость очень маленькая:
dim rem as byte
sendData rem, binary
Вопрос как это делает NetMeeting иные проги работающие через протокол TCP/IP.
dim a() as byte
...
процедура считывания
...
Call WinSock1.senddata (a)
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
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
Сейчас этот форум просматривают: Google-бот, Yandex-бот и гости: 149