怎么用vb编一个能把电脑里的文件发送出去的程序 10
4个回答
展开全部
先去这个地址下载Winsock控件:http://download.pchome.net/dll/m/detail-171903.html
然后添加一个Winsock1到窗体上。然后写代码。
【发送端】代码:
连接代码:
Winsock1.Close
Winsock1.Connect "127.0.0.1", 5000 '这里5000可以自定义。IP设为便于本地调试
发送代码:
Dim a() As Byte
If Winsock1.State = sckClosed Then
MsgBox "服务端连接失败", vbCritical, "警告"
Exit Sub
End If
'-----------------
send_filename = "C:\fasong.exe" '发送的文件名
Open send_filename For Binary As #1
If LOF(1) <= 1000 Then '判断载入文件的大小,如果小于1000直接发送
ReDim a(LOF(1) - 1) As Byte
Get #1, , a
Winsock1.SendData a
Close
Exit Sub
End If
If LOF(1) > 1000 Then '如果大于1000
lump = LOF(1) \ 1000 '切割的块数
left_lump = LOF(1) Mod 1000 '剩下的文件的大小
For i = 1 to lump
ReDim a(1 To 1000) As Byte
Get #1, , a
Winsock1.SendData a
Next
End If
If left_lump > 0 Then '如果剩下文件大小大于0字节
ReDim a(1 To left_lump) As Byte
Get #1, , a
Winsock1.SendData a '发送文件
End If
Close
'--------------------------------------------------------
Close
接收端添加一个Winsock1。代码:
If Winsock1.State = sckClosed Then
Winsock1.LocalPort = 5000
Winsock1.Listen
ElseIf Winsock1.State = sckConnected Then
End If
在Winsock1的ConnectionRequest事件中这样写:
On Error Resume Next
Winsock1.Close
Winsock1.Accept requestID
在Winsock1的DataArrival事件中这样写:
On Error Resume Next
DoEvents '防止卡死
Dim a() as Byte
accept_filename = "d:\accept.exe" '接收后的文件名
Open accept_filename for binary as #1
If LOF(1) = 0 Then '如果接收到的是新文件
ReDim a(bytesTotal - 1) '必须减1 因为数组默认下标为0
Winsock1.GetData a
Put #1, 1, a '第一次写在1的位置
Else '如果是文件剩下的部分
ReDim a(bytesTotal - 1)
Winsock1.GetData a
Put #1, LOF(1) + 1, a '从第二次开始就将读写文件的指针往后移动一个字符,再写入数据。 '如果不往后移动指针(+1)的话,新的数据会覆盖掉前面的数据
End If
Close
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询