| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2007 人关注过本帖
标题:[求助]我的文件传送程序
只看楼主 加入收藏
abc5566
Rank: 1
等 级:新手上路
帖 子:201
专家分:0
注 册:2007-9-15
结帖率:100%
收藏
 问题点数:0 回复次数:15 
[求助]我的文件传送程序

请大家帮我看看哪里错了:我用了udp连接,另外复制了此程序做为通信的另一方,请大家务必帮我解决
请问如果放在不同机上能否传txt文件?
Dim a As String

Private Sub Command1_Click()
Dim bytdate() As Byte
Dim filename As String
Dim lngfile As Long
Dim i As Long
filename = Dir1.Path + "\" + File1.filename
lngfile = FileLen(filename) \ 1024
For i = 0 To lngfile
ReDim myfile(1023) As Byte
Open filename For Binary As #1
Get #1, i * 1024 + 1, myfile
Close #1
ws1.SendData myfile
DoEvents
Next i
End Sub


Private Sub Command2_Click()
With ws1
.RemoteHost = Text1.Text
.RemotePort = 5001
.Bind 5001
End With
End Sub

Private Sub Dir1_Change()
File1.Path = Dir1.Path
End Sub

Private Sub Drive1_Change()
Dir1.Path = Drive1.Drive
End Sub

Private Sub Form_Load()
a = File1.filename
End Sub

Private Sub ws1_DataArrival(ByVal bytesTotal As Long)
Static i As Long
Dim myfile() As Byte
Dim mylong As Double
Dim mypath As String
Dim fn As Integer
fn = FreeFile
mypath = "d:\a\a.txt
ReDim myfile(bytesTotal - 1)
ws1.GetData myfile
fn = FreeFile
Open mypath For Binary As #fn
Put #fn, mylong + 1, myfile
Close #fn
End Sub

[此贴子已经被作者于2007-11-21 1:53:17编辑过]

搜索更多相关主题的帖子: 文件 
2007-11-21 01:07
redice
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:902
专家分:0
注 册:2006-12-11
收藏
得分: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
ws1.SendData myfile
DoEvents
Next i


不能这样发!要确定对方已收到上一数据包后再发下一个。你这样快速地发送,对方Winsock是处理不过来的。建议,没发送一个数据包,对方收到后回复一个到达信息到发送端,发送端收到这个信息后再发送下一个包。我就是这样做的,我希望有人能分享更好的算法。

鲲鹏数据 - 专业Web数据采集服务提供者
http://www.
2007-11-22 20:56
redice
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:902
专家分:0
注 册:2006-12-11
收藏
得分:0 
我的网站有一个开源的程序,里面有用到局域网文件互传的 你可以参考一下
:[url]http://redice.1.[/url]  到“开源作品”里找 “ 轻风聊天系统”

鲲鹏数据 - 专业Web数据采集服务提供者
http://www.
2007-11-22 20:59
三断笛
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:31
帖 子:1621
专家分:1617
注 册:2007-5-24
收藏
得分:0 
'这两个函数实现了winsock控件传送和接收文件的功能,最大能传送 524288G文件,但传超大文件时实际效率比较_低,传送文件基本思路是以二制模式分块传递,系统资源占用高
Const Max As Long = 65534     '每次最大传送数据
Dim SendPos As Double           '发送数据位置
Dim RecPos As Double             '接收数据位置(此二变量可实现断点续传)
Sub SendFile(FileName As String, Wnk As Winsock)
Static iPoss As Double              '当前发送位置
Dim SendData() As Byte              '二进制数据
Dim Length As Double                '记录文件长度
Dim FileNum As Integer
FileNum = FreeFile                  '获得文件号
Length = FileLen(FileName)          '获得文件长度
Open FileName For Binary As FileNum
DoEvents
If Length <= Max Then
ReDim SendData(1 To Length)
Get FileNum, , SendData
Wnk.SendData SendData
Else
While iPos <= Length - Max
ReDim SendData(1 To Max)
Get FileNum, iPos + 1, SendData
Wnk.SendData SendData
iPos = iPos + Max
Wend
End If
ReDim SendData(Length - iPos - 1) '此处注意要-1,否则不会成功!
Get FileNum, iPos + 1, SendData
Wnk.SendData SendData
Close FileNum
Debug.Print FileLen(FileName)
End Sub
'==============================================================
'==============================================================
Sub ReceiveData(FileName As String, Wnk As Winsock, Lens As Long)  '接收数据
Dim RecData() As Byte
Dim Length As Double
Dim FileNum As Integer
FileNum = FreeFile
Open FileName For Binary As FileNum
Length = FileLen(FileName)
ReDim RecData(1 To Lens)
Wnk.GetData RecData
Put FileNum, Length + 1, RecData
Close FileNum
End Sub
2007-11-24 09:47
梦心
Rank: 4
来 自:福建平和
等 级:贵宾
威 望:13
帖 子:1910
专家分:0
注 册:2007-5-11
收藏
得分:0 
...
飞鸽传书?

我清高和我骄傲的倔强,在风中大声的唱:我不听,我不听~~做我自己最特别,呼呼~~啦啦~~~
我的博客园地址: [url]http://[/url]
2007-11-25 02:14
abc5566
Rank: 1
等 级:新手上路
帖 子:201
专家分:0
注 册:2007-9-15
收藏
得分:0 
谢谢大家拉,ls的程序我看了,学了很多,不懂在请教你们
2007-11-25 18:11
redice
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:902
专家分:0
注 册:2006-12-11
收藏
得分:0 
回复 4# 的帖子
While iPos <= Length - Max
ReDim SendData(1 To Max)
Get FileNum, iPos + 1, SendData
Wnk.SendData SendData
iPos = iPos + Max
Wend

这样是行不通的

鲲鹏数据 - 专业Web数据采集服务提供者
http://www.
2007-11-28 11:13
三断笛
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:31
帖 子:1621
专家分:1617
注 册:2007-5-24
收藏
得分:0 
怎么行不通了?
假设Max=5 Length=128
那循环25次后就传送125,剩下的3在后面继续传送了啊
2007-11-28 11:50
abc5566
Rank: 1
等 级:新手上路
帖 子:201
专家分:0
注 册:2007-9-15
收藏
得分:0 
请问redice,这段程序是什么意思(在你那个聊天系统的)
For i = 1 To LOF(filenum) \ 7168   '循环发送文件的数据,每次发送5K
        '是否要在此处加一个缓冲时间
        complete = False  '发送该数据包前将发送完成的标记设为 fasle
        Get filenum, m, size '读取指定大小的数据
        m = 7168 * i
        Winsock1.SendData size '发送数据
        DoEvents
        While Not complete '检测发送上面的数据是否发送完成,如果完成则继续原来循环
        DoEvents
        Wend
    Next
    If Int(LOF(filenum)) > Int((LOF(filenum) \ 7168) * 7168) Then '将未发送完的数据发送了
       ReDim size(LOF(filenum) - (LOF(filenum) \ 7168) * 7168)
       Get filenum, m, size
       Winsock1.SendData size
    End If
2007-11-29 23:57
redice
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:902
专家分:0
注 册:2006-12-11
收藏
得分:0 
While Not complete '检测发送上面的数据是否发送完成,如果完成则继续原来循环
        DoEvents
        Wend

这是关键,等待对方发送回接收到上一包的确认信息,然后再发下一个包

鲲鹏数据 - 专业Web数据采集服务提供者
http://www.
2007-11-30 13:00
快速回复:[求助]我的文件传送程序
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.026464 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved