| 设计 任务书 文档 开题 答辩 说明书 格式 模板 外文 翻译 范文 资料 作品 文献 课程 实习 指导 调研 下载 网络教育 计算机 网站 网页 小程序 商城 购物 订餐 电影 安卓 Android Html Html5 SSM SSH Python 爬虫 大数据 管理系统 图书 校园网 考试 选题 网络安全 推荐系统 机械 模具 夹具 自动化 数控 车床 汽车 故障 诊断 电机 建模 机械手 去壳机 千斤顶 变速器 减速器 图纸 电气 变电站 电子 Stm32 单片机 物联网 监控 密码锁 Plc 组态 控制 智能 Matlab 土木 建筑 结构 框架 教学楼 住宅楼 造价 施工 办公楼 给水 排水 桥梁 刚构桥 水利 重力坝 水库 采矿 环境 化工 固废 工厂 视觉传达 室内设计 产品设计 电子商务 物流 盈利 案例 分析 评估 报告 营销 报销 会计 | |||||
|
|||||
|
|||||
|
|||||
用VB实现聊天讨论室和点对点会话在一个单位内部或通过广域协议(如X.25)互联的行业内部都有几十或上万台计算机互联,用Intranet虽然可以建立聊天室,但实现点对点实时对话却比较困难。本人用Winsock和VB自制了一套聊天室和对话系统,特拿来供同行们参考。
一・Winsock的主要属性、事件和方法http://www.16sheji8.cn/
Winsock是不可见控件,控件文件名是MSWINSCK.OCX,全称为Mcirosoft winsock control,使用时要将此控件调入工具箱。
1・属性:①Protocol=0 //使用TCP协议;
②RemoteHost //准备连接远程机的IP地址
③RemotePort //连接远程机的IP端口号 (1024―65535之间)
④LocalPort //本地机监听IP端口号必须与呼叫机端口号相同
2・方法:①connect //申请连接远程机
②listen //设置监听
③accept //建立实际连接
④senddata //发送数据
⑤getdata //接收数据
⑥close //关闭连接
3・事件:①connectionrequest //一方请求连接时另一方产生
②connect //一方机接受连接时另一方产生
③close //一方机关闭连接时另一方产生
④dataArrival //一方发送数据另一方产生
⑤error //请求连接失败时产生
二・制作方法
⑴ 在一工程中添加两个表单form1(模拟客户端)、form2(模拟服务器端)。
form1中装入控件:http://www.16sheji8.cn/
控件名主要属性用 途
VB.Form form1caption=”雷萌聊天室”
controlbox=0 ‘False模拟客户机表单
VB.Textbox text1multiline=-1 ‘True
scrollbars=3 ‘Bath用于输入发往聊天室的信息
VB.Textbox text2locked=-1 ‘True
multiline=-1 ‘True
scrollbars=3 ‘Bath显示从聊天室发来的信息
VB.Combobox combo1text=”10.84.234.11” ‘任定默认地址放入常用的地址
VB.Commandbutton comm1caption=”退出”最小化form1
VB.Commandbutton comm2caption=”连接”请求与输入的地址连接http://www.16sheji8.cn/
VB.Commandbutton sendcaption=”发送”发送Text1中的内容
VB.Label label1caption=“请在此输入发表的信息”Text1的框标
VB.Label label2caption=“聊天室或对方的信息”Text2的框标
VB.Label label3caption=”等待连接”显示连接状态信息
VB.Label label4caption=”聊天室或对方地址”用于指示Combo1
VB.Label label5caption=”操作:选地址连接,连接成功看到聊天室内容后再输信息发送”操作说明
VB.Timer timer1interval=6000; enabled=false防止连接超时
MSWinsocklib.winsock a
用于数据传输
form2中装入控件:
控件名主要属性用 途
VB.Form form2caption=”接收信息”
controlbox=0 ‘Falsehttp://www.16sheji8.cn/模拟客户机表单
VB.Commandbutton command1caption=”返回”隐含Form2窗口
VB.Commandbutton command2caption=”对话”点对点会话时用此直接启动Form1
VB.Textbox text1locked=-1 ‘True
multiline=-1 ‘True
scrollbars=3 ‘Bath存放聊天或对话内容
VB.Label label1caption=”接收的信息”Text1的框标
MSWinsocklib.Winsock a
用于监听
MSWinsocklib.Winsock b
用于传送聊天信息
⑵ 在Form1的各控件事件中加入如下代码:
Dim flag As Boolean 注释:连接状态变量
Private Sub a_Connect()
flag = True
End Sub
Private Sub a_DataArrival(ByVal bytesTotal As Long)
Dim i As String
a.GetData i
Label3.Caption = "连接成功!"
Comm2.MousePointer = 0
Form1.MousePointer = 0http://www.16sheji8.cn/
Timer1.Enabled = False
If i = Chr(0) Then
Text2.Text = "你是今天第一个进入本聊天室的客户。" + Chr(13) + Chr(10)
Else
Text2.Text = Text2.Text + i
End If
Text2.SelStart = Len(Text2.Text)
Send.MousePointer = 0
Combo1.Enabled = False
Comm2.Caption = "断开连接"
Text1.SetFocus
End Sub
Private Sub a_Error(ByVal Number As Integer, Description As String, ByVal Scode As Long, ByVal Source As String, ByVal HelpFile As String, ByVal HelpContext As Long, CancelDisplay As Boolean)
flag = False
Timer1.Enabled = False
Comm2.MousePointer = 0
Form1.MousePointer = 0
MsgBox "网络连接失败 !"
Label3.Caption = "等待连接"
Combo1.Enabled = True
Combo1.SetFocus
a.Close
Comm2.Caption = "连接"
End SubPrivate Sub Comm1_Click()
a.Close 注释:关闭连接
Form1.WindowState = 1
End Sub
Private Sub Comm2_Click()
If Comm2.Caption = "断开连接" Then
a.Close
Comm2.Caption = "连接"
Label3.Caption = "等待连接"
Combo1.Enabled = True
Timer1.Enabled = False
Comm2.MousePointer = 0
Form1.MousePointer = 0
Else
Text2.Text = ""
Label3.Caption = "正在连接.."
Comm2.MousePointer = 11
Form1.MousePointer = 11
Timer1.Enabled = True
flag = False
a.Protocol = sckTCPProtocolhttp://www.16sheji8.cn/
a.RemoteHost = Combo1.Text
a.RemotePort = 3000
a.Connect
End If
End Sub
Private Sub Form_DblClick()
If MsgBox("关闭本聊天室! 确认吗?", 36, "退出系统") = 6 Then
End
Else
Form1.WindowState = 1
End If
End Sub
Private Sub Form_Load()
If App.PrevInstance Then
MsgBox "本系统已经加载,请看任务拦!", 48, "提示"
End
End If
flag = False
Load Form2 ‘读入form2进入监听
End Sub
Private Sub Send_Click()
Dim S As String
On Error GoTo ffff ‘防止链路中断
Send.MousePointer = 11
If Right(Text1.Text, 1) <> Chr(10) Then
S = Text1.Text + Chr(13) + Chr(10)
Else
S = Text1.Text
End If
If flag Then
a.SendData Shttp://www.16sheji8.cn/
End If
Exit Sub
ffff:
MsgBox "连接中断!", 48, "提示"
a.Close
Send.MousePointer = 0
Comm2.Caption = "连接"
Label3.Caption = "等待连接"
Combo1.Enabled = True
Comm2.MousePointer = 0
Form1.MousePointer = 0
Exit Sub
End Sub
Private Sub Timer1_Timer()
flag = False
Timer1.Enabled = False
Comm2.MousePointer = 0
Form1.MousePointer = 0
MsgBox "网络连接失败(超时) !"
Label3.Caption = "等待连接"
Combo1.Enabled = True
Combo1.SetFocus
a.Close
Comm2.Caption = "连接"
End Sub
⑶ 在Form2的各控件事件中加入如下代码:
Const maxn = 200 ‘最大同时连接本机的客户数
Dim user(maxn) As Boolean
Private Sub Command1_Click()
Form2.Hide
End Sub
http://www.16sheji8.cn/
Private Sub Command2_Click()
Load Form1
Form1.Show
End Sub
Private Sub Form_Load()http://www.16sheji8.cn/
Dim str1 As String
Form2.Caption = "雷萌通信软件"
注释:winsock控件 a 作为服务器程序监听
a.LocalPort = 3000
a.Listen
End Sub
Private Sub a_ConnectionRequest(ByVal requestID As Long)
Dim i As Long
For i = 1 To maxn ‘当一客户请求时给启动一Winsock控件标志号
If Not user(i) Then
user(i) = True
Exit For
End If
Next i
If i > maxn Then
Exit Sub
End If
Load b(i) ‘当一客户请求时启动一Winsock控件
b(i).Accept requestID 注释:实际建立连接
If Text1.Text = "" Then 注释:发送数据
b(i).SendData Chr(0)
Else
b(i).SendData Text1.Text
End If
Form2.Show
End Sub
http://www.16sheji8.cn/
Private Sub s_Close(Index As Integer)
b(Index).Close 注释:关闭连接
Unload b(Index) 注释:卸载 一个WinSock 控件
user(Index) = False
End Sub
Private Sub b_DataArrival(Index As Integer, ByVal bytesTotal As Long)
Dim str As String
Dim i As Long
b(Index).GetData str
Text1.Text = Text1.Text + str
For i = 1 To maxn
If user(i) Then
b(i).SendData str
End If
Next i
End Subhttp://www.16sheji8.cn/
三・运行
本程序在VB6.0中编译通过,运行后最小化到任务栏上,也可以用API的Shell_Notifyicon 函数做入右下角的指示器栏中常驻内存。你可以在网络中用一个固定的机器地址作为聊天讨论室,其他用户都选该机地址连接进入该室聊天或讨论。各用户也可选各自熟悉的地址进行连接对话,双击form1空白处从内存中撤出系统。根据同样的原理可以制作电子邮件系统。
毕业66资料站 biye66.com ©2015-2026 版权所有 | 微信:15573586651 QQ:3903700237
本站毕业设计和毕业论文资料均属原创者所有,仅供学习交流之用,请勿转载并做其他非法用途.如有侵犯您的版权有损您的利益,请联系我们会立即改正或删除有关内容!