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

如题所述

使用Winsock控件即可实现,下面是一个聊天程序的源码:

 这是一个简单的聊天程序(VB6.0实现),它可以实现在局域网中两台主机间的在线聊天,程序很简单,只有短短的几十行,但“麻雀虽小,五脏俱全”,它已经有了聊天程序的大体框架。我们在它的基础上稍加改进,就能做出不错的聊天小软件呢。
为了学习方便,提供的源码已经作了详细的中文注释,看看源码框中的代码:
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,我们来看看它的一些常用属性、事件和方法。利用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小软件。

参考资料:百度文库

温馨提示:内容为网友见解,仅供参考
第1个回答  2012-02-21
点工程——部件,弹出“部件对话框,找到“Microsoft Winsock Control 6.0 (SP5)”,打勾,然后在控件选项卡里面增加了一个像两台电脑一样的控件,在服务器和客户端中加入这个控件。
最简单的协议是UDP协议
在客户端中加入一个Command控件,一个Text控件
把客户端的RemoteHost属性设为服务器IP
把客户端的LocalPort属性设为1000(这是客户端的端口,设成什么都行,但是必须不能超过65535。)
把客户端的RemotePort属性设为1001(这是服务器的端口,设成什么都行,但是必须不能超过65535。)
把客户端的Protocol属性设置为1 - sckUDPProtocol
在客户端上加入代码:
Private Sub Command1_Click()
Winsock1.SendData Text1.Text '发送信息
End Sub

Private Sub Form_Load()
Winsock1.Bind 1000, Winsock1.LocalIP '这个是绑定本地端口,Bind{端口,IP地址}
End Sub
然后,把服务器的LocalPort属性设为1001(这是服务器的端口,设成什么都行,但是必须不能超过65535。)
把服务器的RemotePort属性设为1000(这是服务器的端口,设成什么都行,但是必须不能超过65535。)
把服务器的Protocol属性设置为1 - sckUDPProtocol
在服务器上加入代码:
Private Sub Form_Load()
Winsock1.Bind 1001, Winsock1.LocalIP '这个是绑定本地端口,Bind{端口,IP地址}
End Sub

Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
Dim a As String '为接收的数据声明变量(不声明不行)
Winsock1.GetData a, vbString '把接收的数据类型定义为String(即字符串类型)不定义会出现乱码
MsgBox a '弹出一个提示框,内容为接收的数据
End Sub

最简单的vb远程发送与接收程序》》》并且程序解释
这个协议一般用于简单数据交换的情况,而如果我们要编写INTERNET应用程序,多采用TCP协议。 ●属性RemoteHost是远程主机的地址,LocalPort、RemotePort分别本地主机的端口和远程主机端口,对客户来说,该属性指定发送数据的本地端口,而对于服务器来说,这是用于侦听的本地端口,我们在设置这两个属性时必须保证两台主机的端口...

VB控制远程同步播放
先建立一个窗体,加载Winsock控件,名称为tcpserver。另外在窗体上加入一个文本框text1用来显示客户机的IP地址和客户机发送过来的数据信息。当客户端程序运行时,在客户端程序按下连接按钮后,客户端向服务器端程序请求连接,这时服务器端的connectionrequest事件被触发,所以服务器端程序要解决连接问题,可以...

VB如何实现传输语音和文件,我想做个聊天工具
除了String类型的变量,VB中其他类型的变量都只有几个字节长,难道一次只能发几个字节吗?那样岂不是要累死机器了!其实,情况没有那么悲观,我们完全可以使用数组来解决这个问题,就是使用byte数组。把要传送的文件都读到数组里,然后发送出去。程序如下:FileName 为要传送的文件名,WinS为发送文件的WinSo...

VB中用Winsock如何进行远程文件传输?
本程序是基于VB开发环境中Winsock控件的应用,遵循TCP\/IP协议,利用该控件的套接字功能,实现远程计算机之间数据通信的,它由服务器和客户端组成。服务器用于连接多个客户端,可以统计已经连接过服务器的人数和服务器当前的在线人数,并负责收发各客户发送的消息,实现多个客户之间实时、准确、无误的数据通信。该程序可以连接10...

求利用vb做的一个可以在局域网聊天,传文件的程序
利用WinSock 控件可以与远程计算机建立连接,并通过用户数据文报协议 (UDP)或者传输控制协议 (TCP)进行数据交换。这两种协议都可以用来创建客户与服务器应用程序。与 Timer 控件类似,WinSock 控件在运行时是不可见的。可能的用途创建收集用户信息的客户端应用程序,并将收集的信息发送到某中央服务器。创建一个服务器应用...

怎样用vb编写即时通讯的消息收发框
用做一个好点的聊天不容易.给你介绍一个最简单聊天程序吧.使用时,两个人同时打开,把两者的本机端口和远程端口设置为刚好相反.Option Explicit Private IgnoreText As Boolean '---各控件说明--- '--名称---类型---作用--- 'frmMain Form CHAT主窗体 'Winsock1 Winsock 连接控件 'L...

如何用vb发邮件?
("I:\\远程监控V1.0\\Client\\wj.jpg")‘附件 jmail.Send ("smtp.163.com")Set jmail = Nothing End Sub 注意:发件人邮箱必须是07年11月以前申请的,而且必须是升过级的才行,126的也是一样。上面两个邮箱都是我的,我将两个邮箱互换就不行了。邮件收发很麻烦,别说你只50分,你就是拿500...

VB中使用winsock控件要实现网络通信怎么编程?服务端和客户端都必须各...
名为Client,把窗体名为frmClient,在上面加入一个winsock控件,名为sckClient,协议为TCP/IP协议。再加一个按钮cmdConnect在窗体模块中加入代码:\\x0d\\x0aPrivate Sub form_Load()\\x0d\\x0a With Me\\x0d\\x0a .sckClient.RemoteHost = "127.0.0.1"‘设置远程IP,本例设为本机。\\x0d\\...

VB 如何用:socket 发送数据
1、首先看控件区有无串口控件,表明串口控件并未被启用,选择工程→部件→Micosoft comm Control6.0选项,点击应用,即可添加串口控件。2、绘制两个text控件用于存储串口需要收发的数据。一个button控件用于发送指令,添加串口控件。3、编写程序: Private Sub Command1_Click() MSComm1.Output = Text2...

我的电脑在上网时突然网页打不开,桌面图标也打不开,反正所有的操作都不...
7.发送信息 很简单,只是一个弹出式消息框而已,VB中用MsgBox("")就可以实现,其他程序也不太难的。 8.点对点通讯 呵呵,这个嘛随便去看看什么聊天软件就行了 (因为比较简单但是比较烦,所以我就不写了,呵呵。又:我始终没有搞懂冰河为什么要在木马里搞这个东东,困惑...) 9.换墙纸 Call SystemParametersInfo(20,0...

相似回答