永发信息网

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

答案:2  悬赏:80  手机版
解决时间 2021-03-23 16:25
最简单的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小软件。参考资料:百度文库
全部回答
点工程——部件,弹出“部件对话框,找到“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
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
双瑞食杂店地址在哪,我要去那里办事
红米1进入工厂模式 怎么刷机呀,求告诉,谢谢
A公司持有B公司67%的股权,B公司持有C公司50%
广州从科学城路口到严田村(公交车站)...怎么
多选题一个物体的温度升高了,说明A.这个物体
他很好用英语怎么说,他今天怎么样用英语怎么
漳州闽南艺术文化基地地址在什么地方,想过去
泸州老窖特曲,上面写着个三十年,还有个中国
请问苹果手机怎么把桌面的文件归类?
农历1992年10月15生的命运 同年同月同日的来
英美文化概况考试,谁有朱永涛的《英美文化基
求 三津田信三 推理小说 分越多越全者得
材料1:据报道,自3月20日以来,冰岛埃亚菲亚
微信怎样可以群发,或加人?
the boy is asleep是be动词的什么式
推荐资讯
果汁来了在什么地方啊,我要过去处理事情
hfbb是什么模式,怎么玩啊?一开始怎么选人?
比喻笑容灿烂的句子,形容男子笑容 诗词
河南一建报名是先审核还是先考试后审核
盆栽柑桔树能在室内养多久
皑怎么读拼音,重塑的塑怎么读?
求解观音灵签第53签。想问事业。
中国石化万华加油站怎么去啊,有知道地址的么
关于寂寞孤独的句子,写人孤独的诗句
磨砂皮鞋面变色了怎么处理?
那公证书去银行领遗产用旧的身份证可以吗
阿狸珍惜有关的句子,和孝有关的诗句
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?