Vb自动接收文件源码(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