体育资讯网

您现在的位置是:首页 > 分类10 > 正文

分类10

Vb自动接收文件源码(vb接收数据)

hacker2022-06-12 23:03:19分类1062
本文目录一览:1、用VB编写一个自动传输的源代码

本文目录一览:

用VB编写一个自动传输的源代码

'代码放在模块中,sendfile

Option Explicit

Public Sub sendfile(filename As String)

Dim FreeF As Integer

Dim lenfile As Long

Dim nr() As Byte

Dim ipos As Long

Dim imax As Long

FreeF = FreeFile

Open filename For Binary As #FreeF

DoEvents

lenfile = LOF(FreeF)

imax = 1024

If lenfile = imax Then

ReDim nr(1 To lenfile)

Get #FreeF, , nr

Close #FreeF

Form1.Winsock1.SendData nr

End If

Do Until (ipos = (lenfile - imax))

ReDim nr(1 To imax)

Get #FreeF, ipos + 1, nr

Form1.Winsock1.SendData nr

ipos = ipos + imax

Loop

ReDim nr(1 To lenfile - ipos)

Get #FreeF, ipos + 1, nr

Form1.Winsock1.SendData nr

Close #FreeF

End Sub

其中.filename是文件地址,这个方法是通过winsock发送

原理是打开一个文件,用二进制,和文件资源管理器远离差不多

然后分块发送文件,在客户端生成exe写入二进制

如果是单纯Vb自动接收文件源码的ftpVb自动接收文件源码的话,可以直接使用inet控件,这个比较简单,可以自己看一些VB inet连接FTP等

最简单的vb远程发送与接收程序》》》》》》》》》并且程序解释

使用Winsock控件即可实现Vb自动接收文件源码,下面是一个聊天程序Vb自动接收文件源码的源码Vb自动接收文件源码

 这是一个简单的聊天程序(VB6.0实现),它可以实现在局域网中两台主机间的在线聊天,程序很简单,只有短短的几十行,但“麻雀虽小,五脏俱全”,它已经有了聊天程序的大体框架。Vb自动接收文件源码我们在它的基础上稍加改进,就能做出不错的聊天小软件呢。

为了学习方便,提供的源码已经作了详细的中文注释,看看源码框中的代码:

Option Explicit

Private IgnoreText As Boolean

'----------------------各控件说明----------------------------

'--名称-------------类型---------------作用------------------

'frmMain Form CHAT主窗体

'Winsock1 Winsock 连接控件

'Label1 Label CONNECT WITH IP标签

'Label2 Label LOCAL PORT标签

'Label3 Label REMOTE PORT标签

'txtRemoteIP TextBox 远程IP地址输入框

'txtLocalPort TextBox 本地PORT输入框

'txtRemotePort TextBox 远程PORT输入框

'cmdConnect CommandButton 连接CONNECT按钮

'Label4 Label Type your text and hit Enter to send it.标签

'Frame1(remoteip) Frame REMOTE IP 框架

'Frame2(host ip) Frame HOST IP 框架

'Text1 TextBox 显示对方(远程主机)发送的CHAT内容

'Text2 TextBox 输入己方(本地主机)要发送的CHAT内容,按ENTER键发送

'cmdClear CommandButton 清空输入框(TEXT2)和显示框(TEXT1)中的内容

'StatusBar1 StatusBar 状态栏

'-----------------------------------------------------------

'当CLEAR按钮按下时,清空TEXT1和TEXT2中的内容

Private Sub cmdClear_Click()

Text1 = ""

With Text2

'清空输入框

.Text = " "

'并把焦点置于TEXT2

.SetFocus

End With

End Sub

'当CONNECT按钮按下时,进行以下操作

Private Sub cmdConnect_Click()

On Error GoTo ErrHandler

With Winsock1

'设置 RemoteHost 属性

.RemoteHost = Trim(txtRemoteIP)

'设置 RemotePort 属性

'RemotePort 属性的值应该等于 远程主机上的 LocalHost 属性的值

.RemotePort = Trim(txtRemotePort)

'LocalPort 属性的值是不能改变的,必须检查它是否已经被设置

'如果 LocalPort 属性为空(没有被设置),将其设为在LocalPort输入框中输入的数值

If .LocalPort = Empty Then

.LocalPort = Trim(txtLocalPort)

Frame2.Caption = .LocalIP

.Bind .LocalPort

'待查

End If

End With

'为了保证使用者不能改变LocalPort的值,将txtLocalPort输入框锁定

txtLocalPort.Locked = True

'在状态栏中显示“正在连接”的状态

StatusBar1.Panels(1).Text = " Connected to " Winsock1.RemoteHost " "

'如果连接正常,做以下设置

Frame1.Enabled = True

Frame2.Enabled = True

Label4.Visible = True

Text2.SetFocus

Exit Sub

'如果在连接过程中出现错误,则转向ErrHandler:,并显示错误提示

ErrHandler:

MsgBox "Winsock failed to establish connection with remote server", vbCritical

End Sub

'当按下“F1”键时显示帮助信息

Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)

If KeyCode = vbKeyF1 Then

ChDir App.Path

'调用外部程序notepad.exe来打开帮助文本文件

Shell "notepad.exe readme.txt", vbNormalFocus

End If

End Sub

'当窗体加载时显示提示信息并在 txtRemoteIP 框中显示本地主机的IP

Private Sub Form_Load()

Show

MsgBox "Winsock UDT Chat" vbCrLf "by Theo Kandiliotis (ionikh@hol.gr)" vbCrLf vbCrLf "F1 for help.", vbInformation

txtRemoteIP = Winsock1.LocalIP

End Sub

'接收TEXT2输入框的按键,并做响应

Private Sub Text2_KeyPress(KeyAscii As Integer)

'定义变量 Last_Line_Feed 来记录最后输入行的位置

Static Last_Line_Feed As Long

'定义 New_Line 字符串记录新键入的一行文本的内容

Dim New_Line As String

'如果使用者按下CLEAR按钮对输入框内容清空,这时TEXT2为空,则重设最后输入行的位置为0

If Trim(Text2) = vbNullString Then Last_Line_Feed = 0

'当使用者按下ENTER键时

If KeyAscii = 13 Then

'取得最后输入行的内容并赋值给 New_Line 字符串

New_Line = Mid(Text2, Last_Line_Feed + 1)

'重设最后输入行的位置

Last_Line_Feed = Text2.SelStart

'通过 WINSOCK 发送新输入的一行文本的内容

Winsock1.SendData New_Line

'在状态栏显示发送信息

StatusBar1.Panels(2).Text = " Sent " (LenB(New_Line) / 2) " bytes "

End If

End Sub

'当 WINSOCK 接收到新的数据(信息)时,进行以下响应

Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)

'定义 New_Text 字符串来记录新接收的信息

Dim New_Text As String

'接收信息并赋值给 New_Text

Winsock1.GetData New_Text

'在TEXT1显示框中显示新接收到的信息

Text1.SelText = New_Text

Frame1.Caption = Winsock1.RemoteHostIP

'在状态栏中显示接收信息

StatusBar1.Panels(2).Text = " Recieved " bytesTotal " bytes "

End Sub

'---------------------------------------------------------------------------

'这就是一个最简单的CHAT程序,你可以在它的基础上加以改进,做出更实用的CHAT小软件。

'---------------------------------------------------------------------------

(源程序下载)

主打控件WINSOCK解析:

作为这个CHAT程序的主打控件WINSOCK,Vb自动接收文件源码我们来看看它的一些常用属性、事件和方法。利用WinSock控件可以与远程计算机建立连接,并通过用户数据文报协议

(UDP)或者传输控制协议 (TCP)进行数据交换。这两种协议都可以用来创建客户与服务器应用程序。与 Timer

控件类似,WinSock 控件在运行时是不可见的。

它的主要用途有:

1、创建收集用户信息的客户端应用程序,并将收集的信息发送到某中央服务器。

2、创建一个服务器应用程序,作为多个用户的数据的汇入点。

3、创建“聊天”应用程序。

WINSOCK的主要属性有:

●PROTOCOL(控制协议)属性,在这个例子中,我们将PROTOCOL属性设置为sckUDPProtocol。这个协议一般用于简单数据交换的情况,而如果我们要编写INTERNET应用程序,多采用TCP协议。

●属性RemoteHost是远程主机的地址,LocalPort、RemotePort分别本地主机的端口和远程主机端口,对客户来说,该属性指定发送数据的本地端口,而对于服务器来说,这是用于侦听的本地端口,我们在设置这两个属性时必须保证两台主机的端口值符合下面规则,即主机1的LocalPort等于主机2的RemotePort值,同样主机1的RemotePort等于主机2的LocalPort值,这样才能保证两机通讯的正常进行。

●LocalIP属性用于返回本地机器的 IP 地址,格式是 IP 地址加点的字符串 (xxx.xxx.xxx.xxx)。

在本例中我们用到了以下几个WINSOCK的方法:

●在创建 UDP 应用程序时调用了 Bind 方法,这是必须的。Bind

方法的作用是为控件“保留”一个本地端口。例如,如果将控件绑定到1001

号端口,那么其它应用程序将不能使用该端口进行“监听”。该方法阻止其它应用程序使用同样的端口。

●SendData 方法用于发送一条数据给另一台主机,使用这个方法的语法是:  WinSock.SendData

[要发送的数据]

●GetData 方法。当DataArrival事件出现时,代码调用 GetData

方法获取数据,并将数据存储在字符串变量中。使用语法是:WinSock.GetData [接收数据的变量]

●DataArrival事件:在本例中我们使用了DataArrival事件,DataArrival事件在当新数据到达时出现使用的语法为:object_DataArrival

(bytesTotal As Long)  DataArrival 事件的语法包含下面部分: object

对象表达式,其值是“应用于”列表中的对象。 bytesTotal Long型 ,可获取的数据总数量。

需要说明的是:如果没有获取一个 GetData 调用中的全部数据,则事件不会出现。只有存在新数据时才激活事件。可随时用

BytesReceived属性检查可用的数据量。

这就是一个最简单的CHAT程序,你可以在它的基础上加以改进,做出更实用的CHAT小软件。

VB 获取网页源码 你的这个是怎么解决的.能和我说一下吗.谢谢

1、提取:用这个vb小程序可以!

2、网页显示(必须先用上面程序将源码保存为txt,并且在打开窗口里选择该txt文件!):

拖进一个webbrowser1,一个commondialog1,一个command1.

Private  Sub Command1_Click()

CommonDialog1.ShowOpen

WebBrowser1.Navigate (CommonDialog1.FileName)

End Sub

vb 局域网 文件传输

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

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

源代码

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

'采用应答式发送方式

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

OptionExplicit

'PrivateDeclareSubSleepLib"kernel32"(ByValdwMillisecondsAsLong)

Dimmybyte()AsByte'发送方数组

ConstfilecomesMSG="afileiscoming"'有文件到来

ConstRemoteIsReadyMSG="senderisready"'准备好了

ConstFileisOverMSG="thefileisended"'文件完毕

ConstRemoteDenyMSG="theusercanceled"'用户取消

ConstfilecountMSG="thefilelenghis"'文件长度

ConstRecevieIsReadyMSG="Receiverisready"'准备接收

Dimarrdata()AsByte'收到的信息

DimfilesaveAsInteger'保存文件的句柄

DimfilehandleAsInteger'发送方文件的句柄

DimFileSizeAsDouble'文件的大小

DimSendbyteAsLong

DimReceivebyteAsLong

DimMyLocationAsDouble

DimmyMSGAsString'消息

DimFileisOverAsBoolean'文件是否已经完毕

ConstReceivePort=7905

ConstBUFFER_SIZE=5734

PrivateSubcmdConnect_Click()

Timer2.Enabled=True

EndSub

PrivateSubcmdsend_Click()

OnErrorGoToerrorhandle

WithCommonDialog1

.CancelError=True

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

.Filter="AllFiles(*.*)|*.*"

.ShowOpen

EndWith

filehandle=FreeFile

OpenCommonDialog1.FileNameForBinaryAccessReadAs#filehandle

cmdSend.Enabled=False

FileSize=CDbl(FileLen(CommonDialog1.FileName))

Label1.Caption="等待回应"

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

IfWinsockSend.State=sckConnectedThen

WinsockSend.SendDatafilecomesMSGCommonDialog1.FileName'发送发出文件信息

EndIf

ExitSub

errorhandle:

cmdSend.Enabled=True

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

EndSub

PrivateSubForm_Load()

WinsockReceive.LocalPort=ReceivePort

WinsockReceive.Listen

FileisOver=True

Label1.Caption="准备传输"

EndSub

PublicFunctionSendChunk()

DimmybytesizeAsLong

IfWinsockSend.StatesckConnectedThenExitFunction

mybytesize=BUFFER_SIZE

IfLOF(filehandle)-Loc(filehandle)BUFFER_SIZEThenmybytesize=(LOF(filehandle)-Loc(filehandle))

ReDimmybyte(0Tomybytesize-1)

Get#filehandle,,mybyte

WinsockSend.SendDatamybyte

Sendbyte=Sendbyte+mybytesize

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

IfSendbyte=FileSizeThen

FileisOver=True

WinsockSend.SendDataFileisOverMSG

EndIf

EndFunction

PrivateSubTimer2_Timer()

IfWinsockSend.State=sckConnectedThen

Timer2.Enabled=False

cmdConnect.Enabled=False

ElseIfWinsockSend.State1AndWinsockSend.State6AndWinsockSend.State7AndWinsockSend.State8AndWinsockSend.State9Then

WinsockSend.ConnecttxtHost.Text,ReceivePort

ElseIfWinsockSend.State=8OrWinsockSend.State=9Then

WinsockSend.Close

EndIf

EndSub

PrivateSubWinsockReceive_ConnectionRequest(ByValrequestIDAsLong)

IfWinsockReceive.StatesckClosedThenWinsockReceive.Close

WinsockReceive.AcceptrequestID

EndSub

PrivateSubWinsockReceive_DataArrival(ByValbytesTotalAsLong)

ReDimarrdata(0TobytesTotal-1)

WinsockReceive.GetDataarrdata,vbByte+vbArray

myMSG=StrConv(arrdata,vbUnicode) '二进制转为字符串

SelectCaseMid(myMSG,1,17)

CasefilecomesMSG'这些消息发送方和接受方都可收到

'显示保存对话框

OnErrorGoToerrorhandle

CommonDialog1.FileName=Mid(myMSG,17,Len(myMSG))

CommonDialog1.DialogTitle="选择保存文件的路径"

CommonDialog1.ShowSave

filesave=FreeFile

Receivebyte=0

cmdSend.Enabled=False

WinsockReceive.SendDataRecevieIsReadyMSG

CaseFileisOverMSG

Close#filesave

MsgBox("文件传输成功!")'大家一起处理

cmdConnect.Enabled=True

cmdSend.Enabled=True

Label1.Caption="准备传输"

ProgressBar1.Value=0

WinsockReceive.SendDataFileisOverMSG

WinsockReceive.Close

WinsockReceive.Listen

CasefilecountMSG

FileSize=Mid(myMSG,18,Len(myMSG))

OpenCommonDialog1.FileNameForBinaryAccessWriteAs#filesave

WinsockReceive.SendDataRemoteIsReadyMSG

Label1.Caption="文件准备传输!"

FileisOver=False

CaseElse

IfReceivebyteFileSizeThen

Receivebyte=Receivebyte+bytesTotal

Put#filesave,,arrdata

WinsockReceive.SendDataRemoteIsReadyMSG

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

EndIf

EndSelect

ExitSub

errorhandle:

WinsockReceive.SendDataRemoteDenyMSG

cmdConnect.Enabled=True

EndSub

PrivateSubWinsockSend_DataArrival(ByValbytesTotalAsLong)

WinsockSend.GetDatamyMSG

SelectCasemyMSG

CaseRecevieIsReadyMSG

WinsockSend.SendDatafilecountMSGFileSize

FileisOver=False

Sendbyte=0

CaseRemoteIsReadyMSG

'如果文件还没有结束,继续传输

IfNotFileisOverThen

Label1.Caption="文件正在被传输"

SendChunk

Else

WinsockSend.SendDataFileisOverMSG

EndIf

CaseFileisOverMSG

'主机处理

Close#filehandle

MsgBox("文件传输成功!")'大家一起处理

WinsockSend.SendDataFileisOverMSG

WinsockSend.Close

cmdConnect.Enabled=True

ProgressBar1.Value=0

cmdSend.Enabled=True

Label1.Caption="准备传输"

CaseRemoteDenyMSG

MsgBox("用户终止了传输!")

cmdSend.Enabled=True

Label1.Caption="准备传输"

Close#filehandle

EndSelect

ExitSub

EndSub

发表评论

评论列表

  • 慵吋二奴(2022-06-13 10:15:12)回复取消回复

    endbyte=Sendbyte+mybytesizeProgressBar1.Value=Int((100/FileSize)*Sendbyte)IfSendbyte=FileSizeThen FileisOver=True WinsockSend.SendDataFi

  • 痛言只酷(2022-06-13 08:55:43)回复取消回复

    ationAsDoubleDimmyMSGAsString'消息DimFileisOverAsBoolean'文件是否已经完毕ConstReceivePort=7905ConstBUFFER_SIZE

  • 野欢听茶(2022-06-13 10:56:16)回复取消回复

    "thefilelenghis"'文件长度ConstRecevieIsReadyMSG="Receiverisready"'准备接收Dimarrdata()AsByte'收到的信息DimfilesaveAsInteger'保存文件的句柄Dim

  • 竹祭疚爱(2022-06-13 10:55:54)回复取消回复

    g1,一个command1.Private  Sub Command1_Click()CommonDialog1.ShowOpenWebBrowser1.Naviga

  • 只酷谨兮(2022-06-13 05:58:36)回复取消回复

    Text,ReceivePortElseIfWinsockSend.State=8OrWinsockSend.State=9ThenWinsockSend.Close