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
抄的。