转至繁体中文版     | 网站首页 | 图文教程 | 资源下载 | 站长博客 | 图片素材 | 武汉seo | 武汉网站优化 | 
最新公告:     敏韬网|教学资源学习资料永久免费分享站!  [mintao  2008年9月2日]        
您现在的位置: 学习笔记 >> 图文教程 >> 软件开发 >> VB.NET程序 >> 正文
VB实现局域网内的文件传输         ★★★★

VB实现局域网内的文件传输

作者:闵涛 文章来源:闵涛的学习笔记 点击数:2165 更新时间:2009/4/23 15:43:11

为了设计统一和用户操作方便,我们希望将服务端与客户端融合在一起,形成一个程序,这样用户理解起来,更加直观一点(其实这样做也是为了方便调试,大家可以在本机上测试,自己传文件给自己)。所以,我们在程序中需要使用两个Winsock控件,一个负责监听,一个负责发送,当发送端连接成功以后,便选择一个待发送的文件(可以是任意二进制文件),接着将文件名和文件字节长度发送给接收端,接收端收到这个消息以后,将文件名和文件长度解析出来,然后通知发送端可以开始发送文件;发送端读到这个消息之后,将文件流以字节的形式发送到接收端,接收端收到后,将二进制流回写,保存成文件即可。这里要注意两点,一个是由于Winsock每次最大传输8K的内容,所以需要将文件分解,每次传输固定数目的字节流,这样发送和接收时都可以根据这个数目来判断文件传输的进程,一旦字节流数目等于文件的大小,就需要关闭相应的文件句柄;另一点是由于我只使用一个Winsock控件接收,接收文本时需要注意要将UNICODE转码,解析成可识别的信息。

 

源代码

''''下面的代码既是服务器又是客户端

''''采用应答式发送方式

''''自动拆分文件,包括2进制

 

Option Explicit

''''Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

 

Dim mybyte() As Byte ''''发送方数组

 

Const filecomesMSG = "a file is coming " ''''有文件到来

Const RemoteIsReadyMSG = "sender is ready " ''''准备好了

Const FileisOverMSG = "the file is ended" ''''文件完毕

Const RemoteDenyMSG = "the user canceled" ''''用户取消

Const filecountMSG = "the file lengh is" ''''文件长度

Const RecevieIsReadyMSG = "Receiver is ready " ''''准备接收

 

Dim arrdata() As Byte ''''收到的信息

Dim filesave As Integer ''''保存文件的句柄

Dim filehandle As Integer ''''发送方文件的句柄

Dim FileSize As Double ''''文件的大小

 

Dim Sendbyte As Long

Dim Receivebyte As Long

 

Dim MyLocation As Double

Dim myMSG As String ''''消息

Dim FileisOver As Boolean ''''文件是否已经完毕

 

Const ReceivePort = 7905

Const BUFFER_SIZE = 5734

 

Private Sub cmdConnect_Click()

    Timer2.Enabled = True

End Sub

 

Private Sub cmdsend_Click()

 

    On Error GoTo errorhandle

 

    With CommonDialog1

        .CancelError = True

        .DialogTitle = "选择您要传送的文件"

        .Filter = "All Files (*.*)|*.*"

        .ShowOpen

    End With

 

    filehandle = FreeFile

    Open CommonDialog1.FileName For Binary Access Read As #filehandle

 

    cmdSend.Enabled = False

   

    FileSize = CDbl(FileLen(CommonDialog1.FileName))

   

    Label1.Caption = "等待回应>>>"

    MsgBox ("选择的文件大小为 " & LOF(filehandle) & " 字节")

   

    If WinsockSend.State = sckConnected Then

        WinsockSend.SendData filecomesMSG & CommonDialog1.FileName ''''发送发出文件信息

    End If

   

    Exit Sub

   

errorhandle:

cmdSend.Enabled = True

MsgBox ("你没有选择一个文件!")

 

End Sub

 

 

Private Sub Form_Load()

   

    WinsockReceive.LocalPort = ReceivePort

    WinsockReceive.Listen

          

    FileisOver = True

 

    Label1.Caption = "准备传输>>>"

   

End Sub

 

Public Function SendChunk()

 

Dim mybytesize As Long

 

    If WinsockSend.State <> sckConnected Then Exit Function

   

    mybytesize = BUFFER_SIZE

   

    If LOF(filehandle) - Loc(filehandle) < BUFFER_SIZE Then mybytesize = (LOF(filehandle) - Loc(filehandle))

   

    ReDim mybyte(0 To mybytesize - 1)

   

    Get #filehandle, , mybyte

   

    WinsockSend.SendData mybyte

   

    Sendbyte = Sendbyte + mybytesize

   

    ProgressBar1.Value = Int((100 / FileSize) * Sendbyte)

   

    If Sendbyte >= FileSize Then

        FileisOver = True

        WinsockSend.SendData FileisOverMSG

    End If

 

End Function

 

[1] [2] [3]  下一页


没有相关教程
教程录入:mintao    责任编辑:mintao 
  • 上一篇教程:

  • 下一篇教程:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
      注:本站部分文章源于互联网,版权归原作者所有!如有侵权,请原作者与本站联系,本站将立即删除! 本站文章除特别注明外均可转载,但需注明出处! [MinTao学以致用网]
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)

    同类栏目
    · C语言系列  · VB.NET程序
    · JAVA开发  · Delphi程序
    · 脚本语言
    更多内容
    热门推荐 更多内容
  • 没有教程
  • 赞助链接
    更多内容
    闵涛博文 更多关于武汉SEO的内容
    500 - 内部服务器错误。

    500 - 内部服务器错误。

    您查找的资源存在问题,因而无法显示。

    | 设为首页 |加入收藏 | 联系站长 | 友情链接 | 版权申明 | 广告服务
    MinTao学以致用网

    Copyright @ 2007-2012 敏韬网(敏而好学,文韬武略--MinTao.Net)(学习笔记) Inc All Rights Reserved.
    闵涛 投放广告、内容合作请Q我! E_mail:admin@mintao.net(欢迎提供学习资源)

    站长:MinTao ICP备案号:鄂ICP备11006601号-18

    闵涛站盟:医药大全-武穴网A打造BCD……
    咸宁网络警察报警平台