电信主站 网通分站
购买流程 付款方式 常见问题 在线提问 续租服务 购物车
用户名: 密 码: 忘记密码?
首 页
域名注册
虚拟主机
双线主机
服务器租用
VPS主机
企业邮局
代理专区
客服中心
虚拟主机行业资讯 虚拟主机评测对比 互联网最新动态 技术学院 站长资讯 在线教程 网站运营
搜索优化 服务器 网络编程 图形图象 站长之家 网页制作 操作系统
冲浪宝典 软件教学 视频通信 办公软件 邮件系统 网络安全 认证考试
您当前位置:西部数码->资讯中心-> 认证考试-> Java认证
用winsock制作一套聊天室和对话系统_visualbasic教程
作者:网友供稿 点击:0
  西部数码-全国虚拟主机10强!20余项虚拟主机管理功能,全国领先!第6代双线路虚拟主机,南北访问畅通无阻!虚拟主机可在线rar解压,自动数据恢复设置虚拟目录等.虚拟主机免费赠送访问统计,企业邮局.Cn域名注册10元/年,自助建站480元起,免费试用7天,满意再付款!P4主机租用799元/月.月付免压金!
文章页数:[1] 
在一个单位内部或通过广域协议(如X.25)互联的行业内部都有几十或上万台计算机互联,用Intranet虽然可以建立聊天室,但实现点对点实时对话却比较困难。本人用Winsock和VB自制了一套聊天室和对话系统,特拿来供同行们参考。

一·Winsock的主要属性、事件和方法

Winsock是不可见控件,控件文件名是MSWINSCK.OCX,全称为Mcirosoftwinsockcontrol,使用时要将此控件调入工具箱。

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中装入控件:

控件名
主要属性
用途

VB.Formform1
caption=”雷萌聊天室”

controlbox=0‘False
模拟客户机表单

VB.Textboxtext1
multiline=-1‘True

scrollbars=3‘Bath
用于输入发往聊天室的信息

VB.Textboxtext2
locked=-1‘True

multiline=-1‘True

scrollbars=3‘Bath
显示从聊天室发来的信息

VB.Comboboxcombo1
text=”10.84.234.11”‘任定默认地址
放入常用的地址

VB.Commandbuttoncomm1
caption=”退出”
最小化form1

VB.Commandbuttoncomm2
caption=”连接”
请求与输入的地址连接

VB.Commandbuttonsend
caption=”发送”
发送Text1中的内容

VB.Labellabel1
caption=“请在此输入发表的信息”
Text1的框标

VB.Labellabel2
caption=“聊天室或对方的信息”
Text2的框标

VB.Labellabel3
caption=”等待连接”
显示连接状态信息

VB.Labellabel4
caption=”聊天室或对方地址”
用于指示Combo1

VB.Labellabel5
caption=”操作:选地址连接,连接成功看到聊天室内容后再输信息发送”
操作说明

VB.Timertimer1
interval=6000;enabled=false
防止连接超时

MSWinsocklib.winsocka

用于数据传输






form2中装入控件:

控件名
主要属性
用途

VB.Formform2
caption=”接收信息”

controlbox=0‘False
模拟客户机表单

VB.Commandbuttoncommand1
caption=”返回”
隐含Form2窗口

VB.Commandbuttoncommand2
caption=”对话”
点对点会话时用此直接启动Form1

VB.Textboxtext1
locked=-1‘True

multiline=-1‘True

scrollbars=3‘Bath
存放聊天或对话内容

VB.Labellabel1
caption=”接收的信息”
Text1的框标

MSWinsocklib.Winsocka

用于监听

MSWinsocklib.Winsockb

用于传送聊天信息




⑵在Form1的各控件事件中加入如下代码:

DimflagAsBoolean注释:连接状态变量



PrivateSuba_Connect()

flag=True

EndSub



PrivateSuba_DataArrival(ByValbytesTotalAsLong)

DimiAsString

a.GetDatai

Label3.Caption="连接成功!"

Comm2.MousePointer=0

Form1.MousePointer=0

Timer1.Enabled=False

Ifi=Chr(0)Then

Text2.Text="你是今天第一个进入本聊天室的客户。" Chr(13) Chr(10)

Else

Text2.Text=Text2.Text i

EndIf

Text2.SelStart=Len(Text2.Text)

Send.MousePointer=0

Combo1.Enabled=False

Comm2.Caption="断开连接"

Text1.SetFocus

EndSub



PrivateSuba_Error(ByValNumberAsInteger,DescriptionAsString,ByValScodeAsLong,ByValSourceAsString,ByValHelpFileAsString,ByValHelpContextAsLong,CancelDisplayAsBoolean)

flag=False

Timer1.Enabled=False

Comm2.MousePointer=0

Form1.MousePointer=0

MsgBox"网络连接失败!"

Label3.Caption="等待连接"

Combo1.Enabled=True

Combo1.SetFocus

a.Close

Comm2.Caption="连接"

EndSub



PrivateSubComm1_Click()

a.Close注释:关闭连接

Form1.WindowState=1

EndSub



PrivateSubComm2_Click()

IfComm2.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=sckTCPProtocol

a.RemoteHost=Combo1.Text

a.RemotePort=3000

a.Connect

EndIf

EndSub



PrivateSubForm_DblClick()

IfMsgBox("关闭本聊天室!确认吗?",36,"退出系统")=6Then

End

Else

Form1.WindowState=1

EndIf

EndSub



PrivateSubForm_Load()

IfApp.PrevInstanceThen

MsgBox"本系统已经加载,请看任务拦!",48,"提示"

End

EndIf

flag=False

LoadForm2‘读入form2进入监听

EndSub



PrivateSubSend_Click()

DimSAsString

OnErrorGoToffff‘防止链路中断

Send.MousePointer=11

IfRight(Text1.Text,1)<>Chr(10)Then

S=Text1.Text Chr(13) Chr(10)

Else

S=Text1.Text

EndIf

IfflagThen

a.SendDataS

EndIf

ExitSub

ffff:

MsgBox"连接中断!",48,"提示"

a.Close

Send.MousePointer=0

Comm2.Caption="连接"

Label3.Caption="等待连接"

Combo1.Enabled=True

Comm2.MousePointer=0

Form1.MousePointer=0

ExitSub

EndSub



PrivateSubTimer1_Timer()

flag=False

Timer1.Enabled=False

Comm2.MousePointer=0

Form1.MousePointer=0

MsgBox"网络连接失败(超时)!"

Label3.Caption="等待连接"

Combo1.Enabled=True

Combo1.SetFocus

a.Close

Comm2.Caption="连接"

EndSub



⑶在Form2的各控件事件中加入如下代码:

Constmaxn=200‘最大同时连接本机的客户数

Dimuser(maxn)AsBoolean



PrivateSubCommand1_Click()

Form2.Hide

EndSub



PrivateSubCommand2_Click()

LoadForm1

Form1.Show

EndSub



PrivateSubForm_Load()

Dimstr1AsString

Form2.Caption="雷萌通信软件"

注释:winsock控件a作为服务器程序监听

a.LocalPort=3000

a.Listen

EndSub



PrivateSuba_ConnectionRequest(ByValrequestIDAsLong)

DimiAsLong

Fori=1Tomaxn‘当一客户请求时给启动一Winsock控件标志号

IfNotuser(i)Then

user(i)=True

ExitFor

EndIf

Nexti

Ifi>maxnThen

ExitSub

EndIf

Loadb(i)‘当一客户请求时启动一Winsock控件

b(i).AcceptrequestID注释:实际建立连接

IfText1.Text=""Then注释:发送数据

b(i).SendDataChr(0)

Else

b(i).SendDataText1.Text

EndIf

Form2.Show

EndSub



PrivateSubs_Close(IndexAsInteger)

b(Index).Close注释:关闭连接

Unloadb(Index)注释:卸载一个WinSock控件

user(Index)=False

EndSub



PrivateSubb_DataArrival(IndexAsInteger,ByValbytesTotalAsLong)

DimstrAsString

DimiAsLong

b(Index).GetDatastr

Text1.Text=Text1.Text str

Fori=1Tomaxn

Ifuser(i)Then

b(i).SendDatastr

EndIf

Nexti

EndSub

三·运行

本程序在VB6.0中编译通过,运行后最小化到任务栏上,也可以用API的Shell_Notifyicon函数做入右下角的指示器栏中常驻内存。你可以在网络中用一个固定的机器地址作为聊天讨论室,其他用户都选该机地址连接进入该室聊天或讨论。各用户也可选各自熟悉的地址进行连接对话,双击form1空白处从内存中撤出系统。根据同样的原理可以制作电子邮件系统。->


文章整理:西部数码--专业提供域名注册虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!
相关主题
文章页数:[1] 
Google
热门文章
·java认证的目的和步骤_java认证
·sun java it技术认证问题解答_java认证
·scjp认证套题解析之一_java认证
·jcreater+motoj2sdk的配置与使用心得_java认证
·java语言入门(2)_java认证
·java语言入门(1)_java认证
·在java中使用正则表达式_java认证
·java语言特点及开发工具jdk_java认证
·热门问题:java.exe出错错误分析_java认证
·java中的测不准原理_java认证

最新文章
·photoshop简单为美女照片瘦身及调色_photoshop教程
·photoshop模仿龟裂的瓷纹杯_photoshop教程
·photoshop绘鲜美葡萄 表现光影效果_photoshop教程
·java认证培训辅导:随机整数的生成_java认证
·java考试认证:scjp310-035考试心得_java认证
·通过java认证 scjp 考试之精辟总结_java认证
·java认证心得:顺利通过scjp测试全接触_java认证
·java认证培训辅导:随机整数的生成_java认证
·利用photoshop通道计算模拟反转负冲效果_photoshop教程
·linux下安装apache与php_php教程


 
 


版权申明:本站文章均来自网络,如有侵权,请联系我们,我们收到后立即删除,谢谢!

特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有。
  打印  刷新  关闭
返回首页 |关于我们 | 联系我们 | 付款方式 | 创业联盟 | 虚拟主机 | 资讯中心 | 友情链接 | 网站地图

版权所有 西部数码(www.west263.com)
CopyRight (c) 2002~2006 west263.com all right reserved.
公司地址:四川成都市万和路90号天象大厦4楼 邮编:610031
电话总机:028-86262244 86263048 86263408 86263960 86264018 86267838
售前咨询:总机转201 202 203 204 206 208
售后服务:总机转211 212 213 214
财务咨询:总机转224 223 传真:028-86264041 财务QQ:点击发送消息给对方635483282
售前咨询QQ:点击发送消息给对方2182518 点击发送消息给对方241975952 点击发送消息给对方275026793 点击发送消息给对方408235859
售后服务QQ:点击发送消息给对方17708515 点击发送消息给对方307742704 点击发送消息给对方287976517 点击发送消息给对方363783715
《中华人民共和国增值电信业务经营许可证》编号:川B2-20030065号