1. 用vb传输文件(winsock,TCP)
发送每一个文件前先发送文件信息块,内含此文件的名称、长度等信息。接受方可根据长度数据来断开数据流。
2. VB WINSOCK 实现文件传输
假设文件名占用8个字节,将发送文件的第1个字节存储为文件名的长度8,然后用第2-第9个字版节存储文件权名,接收时,先获取第一个字节,得到文件名的长度8,然后截取在byte中的索引1-8的数据,还原文件名。
供参考
3. VB winsock文件传输
在Winsock时你可以像Tcp发送报文一样 规定多少位到多少位是干什么用的
如
Dim s As String * 10
s = "1.txt"
winsock1.senddata s & "yourfile
那么在Winsock.getdata myfile时
trim(left(myfile,10))就是你的文本名称
right (myfile,len(myfile-10))就是你的文本内容
指定文本是你可以在
Winsock1.GetData myFile后用commondialog控件来自己指定或者用Dirver与Dir控件来决定路径
4. VB用WinSock传输文件
你的文件传输程序还在开发初期,本机就是在几乎完全理想的网络上是可回以成功的,一旦在两台不答同的电脑间传输,你的文件传输程序的问题就暴露出来了。
因没有看到你的源代码,很难一下就诊断出你的程序到底存在什么问题。
一般你要注意的要点是:
每包长度不超过1500字节, 最好在1k以下
发出第一包,等待确认包
收到一包,完成校验报文,保存好一包后,回个含包号的确认
收到确认包发下一包,超时没收到确认,重发同一包
这样循环,直到传完为止
你可以用传输自己特制的诊断文件,来快速诊断你程序的问题所在,比如做个文件第一包全1,第二包全2.。。。第十包全0, 第十一包全a,。。。第36包全z, 第37包全A,。。。第72包全Z。 然后反复发送这个文件,这样,收到的文件打开看一眼就看出少了什么,然后检查相关的程序。
5. VB winsock传输文件问题
服务器代码:
Option Explicit
Private Sub Command1_Click()
Dim BytDate() As Byte
Dim FileName As String
Dim lngFile As Long
Dim i As Long
FileName = "d:\a.exe " '取得文件名及路径
lngFile = FileLen(FileName) \ 1024 '取得文件长度
Me.ProgressBar1.Min = 0
Me.ProgressBar1.Max = lngFile + 1
ProgressBar1.Value = 0
For i = 0 To lngFile
ReDim myFile(1023) As Byte '初始化数组
Open FileName For Binary As #1 '打开文件
Get #1, i * 1024 + 1, myFile '将文件写入数组
Close #1 '关闭文件
Winsock1.SendData myFile '发送
DoEvents
ProgressBar1.Value = ProgressBar1.Value + 1
Next i
If ProgressBar1.Value = ProgressBar1.Max Then MsgBox "OK"
End Sub
Private Sub Form_Load()
Winsock1.Protocol = sckTCPProtocol
Winsock1.LocalPort = 2001
Winsock1.Listen
FormCLI.Show
End Sub
Private Sub Winsock1_ConnectionRequest(ByVal requestID As Long)
If Winsock1.State <> 0 Then Winsock1.Close
Winsock1.Accept requestID
End Sub
客户端代码:
Option Explicit
Private Sub Form_Load()
With Winsock1
.Protocol = sckTCPProtocol
.RemoteHost = "192.168.0.69"
.RemotePort = 2001
.Connect
End With
End Sub
Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
Static i As Long
Dim myFile() As Byte
Dim myLong As Double
Dim myPath As String
myPath = "e:\b.exe"
ReDim myFile(bytesTotal - 1) '此处也可以是(0 To bytesTotal-1)
Winsock1.GetData myFile
Open myPath For Binary As #1 '新建文件
myLong = FileLen(myPath)
Put #1, myLong + 1, myFile '将收到的数据写入新文件中
Close #1 '关闭
End Sub
抄的。