我是VB初学者,用WINSOCK传文件,请各位帮着修改一下程序。(附源程序,并不大)
程序在传文件长度的时候就传不过去为什么?
另外还有什么错误,请各位帮着修改一下,完成后肯定给分。
client:
Private Sub Command1_Click()
If wincon.State <> 0 Then
wincon.Close
End If
wincon.Connect
If wincon.State <> 0 Then
Label1.Caption = "连接成功."
End If
End Sub
Private Sub Command2_Click()
Dim tfilename As String '传送的文件名
Dim tfilesize As Long '传送的文件大小
Dim lastsize As Long '最后一块的大小
Dim sendi As Integer '发送的次数
Dim inmax As Integer '最大一次传送的字节数
Dim filenum As Integer '打开文件的句柄
Dim filek() As Byte '缓冲数组
Dim filevalue As Byte '当前取出文件当字的二进值
Dim i As Integer '指定数组下标
Dim j As Integer '控制文件传输次数
Dim s As Long '读文件位置
inmax = 255
wincon.SendData "winsock.txt"
tfilename = filetxt.Text
tfilesize = FileLen(tfilename)
If tfilesize < inmax Then '求出最后一块文件大小
lastsize = tfilesize
Else
lastsize = tfilesize Mod (inmax - 1)
End If
If tfilesize < inmax Then '求出发送的次数
sendi = 1
Else
sendi = Int(tfilesize / (inmax - 1))
End If
wincon.SendData tfilesize
filenum = FreeFile
i = 1
j = 1
s = 1
Open tfilename For Binary Access Read As #filenum
While Not EOF(filenum)
If j < sendi Then
inmax = 255
Else
inmax = lastsize
End If
ReDim filek(inmax) As Byte
If i < inmax Then
Get #filenum, s, filevalue
filek(i - 1) = filevalue
i = i + 1
s = s + 1
End If
If i = inmax Then
wincon.SendData filek
i = 1
j = j + 1
End If
DoEvents
Wend
Close #filenum
If s >= tfilesize Then
MsgBox "文件传输完毕."
End If
End Sub
server:
Public s As Long '写文件的位置
Public tfilename As String '文件名
Public tfilesize As Long '文件大小
Private Sub Form_Load()
If wincon.State <> 0 Then
wincon.Close
End If
wincon.Listen
s = 1
tfilename = ""
tfilesize = 0
End Sub
Private Sub wincon_ConnectionRequest(ByVal requestID As Long)
If wincon.State <> 0 Then
wincon.Close
End If
wincon.Accept requestID
If wincon.State <> 0 Then
Label1.Caption = "连接成功。"
End If
End Sub
Private Sub wincon_DataArrival(ByVal bytesTotal As Long)
Dim i As Integer '指示缓冲数组的下标
Dim cs As Integer '指定进行哪种数据接收
Dim filenum As Long '打开文件的句柄
Dim filek() As Byte '缓冲数组
Dim tfilesize As Long
filenum = FreeFile
If tfilename = "" And tfilesize = 0 Then
cs = 1
End If
If tfilename <> "" And tfilesize = 0 Then
cs = 2
End If
If tfilename <> "" And tfilesize <> 0 Then
cs = 3
End If '规定接收数据的顺序为:1,文件名.2,文件大小.3,文件内容
Select Case cs
Case 1
wincon.GetData tfilename
tfilename = Text1.Text + tfilename '接收文件名,并加上存储路径.
Case 2
wincon.GetData tfilesize, vbLong '接收文件大小
Case 3
ReDim filek(bytesTotal) As Byte '缓冲数组(动态分配大小)
Open tfilename For Binary Access Write As #filenum
wincon.GetData filek, vbByte + vbArray '接收文件内容
i = 1
While i <= bytesTotal
If s <= tfilesize Then
Put #filenum, s, filek(i - 1)
s = s + 1
End If
i = i + 1
DoEvents
Wend
If s >= tfilesize Then
tfilename = ""
tfilesize = 0
s = 1
MsgBox "文件传输完毕。"
End If
Close #filenum
End Select
End Sub
问题点数:35、回复次数:6Top
1 楼bladeMG(刀锋)回复于 2001-12-22 09:42:09 得分 0
请大家帮帮忙吧!Top
2 楼sunyuzhe(sunyuzhe.363.net)回复于 2001-12-22 15:56:37 得分 0
关注upupTop
3 楼soec(龚)回复于 2001-12-22 22:31:08 得分 35
'*****************这是我写的局域网聊天软件的发送文件部分*******************
绝对没有BUG !!!!!
Public Sub SendFile()
StopSend = 2 '2-没有中断信息
Open sendFileName For Binary Access Read As #1
Do
a = LOF(1) - Seek(1)
ReDim bytBuffer(IIf(a >= iniBufferSize, iniBufferSize, a)) '重新定义缓冲区大小
Get 1, , bytBuffer '读取数据
NextOne = False '复位
'**************************************************
Do '等待对方回应 “继续”
DoEvents
Select Case StopSend
Case 0 '自己中断
GoTo f
Case 1 '接收方中断
GoTo f
Case 2 '继续传输
End Select
Loop Until NextOne = True '可以继续发送了
'**************************************************
frmConfrontation.sckData.SendData bytBuffer '发送数据
frmSendFile.Caption = "文件发送" & " - 已发送" & Seek(1) \ 1024 & " K"
'**************************************************
Dim i As Integer
For i = 1 To iniSleepTime '强制减速
Sleep 1 '***
DoEvents
Next
'**************************************************
DoEvents '***
Loop Until Seek(1) >= LOF(1)
frmConfrontation.sckMessage.SendData "##发送完成"
f:
Close #1
Erase bytBuffer '释放内存
Unload frmSendFile
End Sub
Top
4 楼bladeMG(刀锋)回复于 2001-12-23 10:58:15 得分 0
请问楼上的兄台有接收的部分吗?
Top
5 楼visualbasic2000(齐谐)回复于 2001-12-23 11:34:58 得分 0
出错信息是什么?Top
6 楼bladeMG(刀锋)回复于 2001-12-23 11:38:19 得分 0
我的程序运行时没有收到文件长度,传过来的长度为0。Top




