![利用Winsock控件创建的局域网聊天程序_第1页](http://file4.renrendoc.com/view/ad8ceba0d03d02190edf93f3e17173a2/ad8ceba0d03d02190edf93f3e17173a21.gif)
![利用Winsock控件创建的局域网聊天程序_第2页](http://file4.renrendoc.com/view/ad8ceba0d03d02190edf93f3e17173a2/ad8ceba0d03d02190edf93f3e17173a22.gif)
![利用Winsock控件创建的局域网聊天程序_第3页](http://file4.renrendoc.com/view/ad8ceba0d03d02190edf93f3e17173a2/ad8ceba0d03d02190edf93f3e17173a23.gif)
![利用Winsock控件创建的局域网聊天程序_第4页](http://file4.renrendoc.com/view/ad8ceba0d03d02190edf93f3e17173a2/ad8ceba0d03d02190edf93f3e17173a24.gif)
![利用Winsock控件创建的局域网聊天程序_第5页](http://file4.renrendoc.com/view/ad8ceba0d03d02190edf93f3e17173a2/ad8ceba0d03d02190edf93f3e17173a25.gif)
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
-.z1.效劳器端往效劳器窗体〔命名为frmServer〕添加三个控件,分别为LIST1〔存放在线好友〕,te*t1〔留言容〕和te*t2〔聊天记录〕,程序如下:OptionE*plicitConstBusyAsBoolean=FalseConstFreeAsBoolean=TrueDimConnectState()AsBooleanDimSInde*DimUsrs(0To32)'在线人名PrivateSubForm_QueryUnload(CancelAsInteger,UnloadModeAsInteger)EndEndSubPrivateSubForm_Load()IfApp.PrevInstance=TrueThenMsgBo*"程序已在运行",vbCriticalEndEndIfReDimPreserveConnectState(0)OnErrorResumeNe*tConnectState(0)=FreeListener.LocalPort=1001'端口号Listener.Listen'开场侦听EndSubPrivateSubListener_ConnectionRequest(ByValrequestIDAsLong)DimSockInde*AsIntegerDimSockNumAsIntegerOnErrorResumeNe*tSockNum=UBound(ConnectState)IfSockNum>32ThenE*itSub'查找空闲的SckServerSockInde*=FindFreeSocket'如果已有的sock都忙,而且sock数不超过32个,动态添加sockIfSockInde*>SockNumThenLoadSckServer(SockInde*)ConnectState(SockInde*)=BusySckServer(SockInde*).Tag=SockInde*'承受请求SckServer(SockInde*).Accept(requestID)EndSubPrivateSubSckServer_DataArrival(Inde*AsInteger,ByValbytesTotalAsLong)Dimd*AsStringSInde*=Inde*SckServer(Inde*).GetDatad*,vbStringIfLen(Te*t2.Te*t)>=512ThenTe*t2.Te*t="IfRight(d*,2)="||"ThenList1.AddItemReplace(d*,"|",")Usrs(SInde*)=Replace(d*,"|",")Timer1.Enabled=TrueTe*t2.Te*t=Format(Now(),"YY-MM-DDhh:mm:ss")&"“"&Usrs(Inde*)&"〞上线。"&vbCrLf&Te*t2.Te*tOpenApp.Path&"\record.t*t"ForAppendAs*1Write*1,Format(Now(),"YY-MM-DDhh:mm:ss")&"“"&Usrs(Inde*)&"〞上线。"Close*1ElseTe*t1.Te*t=Left(d*,InStr(d*,"|"))&Format(Now(),"YY-MM-DDhh:mm:ss")&vbCrLf&Usrs(Inde*)&"说:"&Right(d*,Len(d*)-InStr(d*,"|"))Te*t2.Te*t=Format(Now(),"YY-MM-DDhh:mm:ss")&"“"&Usrs(Inde*)&"〞对“"&Replace(d*,"|","〞说:"&vbCrLf)&vbCrLf&Te*t2.Te*tOpenApp.Path&"\record.t*t"ForAppendAs*1Write*1,Format(Now(),"YY-MM-DDhh:mm:ss")&"“"&Usrs(Inde*)&"〞对“"&Replace(d*,"|","〞说:"&vbCrLf)Close*1EndIfEndSubPrivateSubSckServer_Close(Inde*AsInteger)Dimi%OnErrorResumeNe*tIfSckServer(Inde*).State<>sckClosedThenSckServer(Inde*).CloseConnectState(Inde*)=FreeTe*t2.Te*t=Format(Now(),"YY-MM-DDhh:mm:ss")&"“"&Usrs(Inde*)&"〞下线。"&vbCrLf&Te*t2.Te*tOpenApp.Path&"\record.t*t"ForAppendAs*1Write*1,Format(Now(),"YY-MM-DDhh:mm:ss")&"“"&Usrs(Inde*)&"〞下线。"Close*1Fori=0ToList1.ListCountIfList1.List(i)=Usrs(Inde*)ThenList1.RemoveItem(i)Usrs(Inde*)="Timer1.Enabled=TrueE*itForEndIfNe*tEndSubPublicFunctionFindFreeSocket()DimSockCount,iAsIntegerSockCount=UBound(ConnectState)Fori=0ToSockCountIfConnectState(i)=FreeThenFindFreeSocket=iE*itFunctionEndIfNe*tiReDimPreserveConnectState(0ToSockCount+1)FindFreeSocket=UBound(ConnectState)EndFunctionPrivateSubTe*t1_Change()DimAr,iOnErrorGoToL1Ar=Split(Te*t1.Te*t,"|")Fori=0ToUBound(Usrs)IfUsrs(i)=Ar(0)AndAr(0)<>"ThenE*itForNe*tSckServer(i).SendDataTe*t1.Te*tL1:EndSubPrivateSubTimer1_Timer()Dimi%,j%,Str$Forj=0ToList1.ListCountStr=Str&List1.List(j)&"||"Ne*tOnErrorResumeNe*tFori=0ToUBound(ConnectState)SckServer(i).SendDataStrNe*tL1:Str="Timer1.Enabled=FalseEndSub2.客户端客户端工程里添加两个窗体〔Login和frmClient〕,分别如下列图,把登陆窗体存放用户名的文本框命名为USRN。程序代码如下〔示,没什么实际意义〕:PrivateSubForm_Load()IfApp.PrevInstance=TrueThenMsgBo*"程序已在运行",vbCriticalEndEndIfUsrn.Te*t=UCase(Environ("UserName"))EndSubPrivateSubForm_QueryUnload(CancelAsInteger,UnloadModeAsInteger)EndEndSubPrivateSubCommand1_Click()Me.HidefrmClient.ShowEndSubPrivateSubCommand2_Click()Usrn.Te*t="Te*t2.Te*t="EndSubPrivateSubCommand3_Click()EndEndSub在对话窗体〔frmClient〕中添加三个对象,List1用于存放在线好友,单击选中要交谈的好友,T*tsend输入要发送的信息,t*tOutput显示收到的信息。Connect按钮用于重新连接效劳器。程序如下:ConstComputerName="你的计算机名字或IP地址"PrivateSubForm_Load()'Winsock控件的名字为SckClient。注意:要指定远程主机,可以使用'IP地址〔例如:"121.111.1.1"〕,也可以使用计算机的“好听的名字〞。SckClient.RemoteHost=ComputerNameSckClient.RemotePort=1001SckClient.ConnectcmdConnect.Enabled=SckClient.State=sckClosedtEndSubPrivateSubcmdConnect_Click()'调用Connect方法,初始化连接。IfSckClient.State<>sckClosedThenSckClient.CloseSckClient.ConnectcmdConnect.Enabled=SckClient.State=sckClosedEndSubPrivateSubForm_QueryUnload(CancelAsInteger,UnloadModeAsInteger)EndEndSubPrivateSubCommand1_Click()'MsgBo*List1.Te*tOnErrorGoToL1IfList1.Te*t="ThenE*itSubSckClient.SendDataList1.Te*t&"|"&t*tSend.Te*tt*tOutput.Te*t=Format(Now(),"YY-MM-DDhh:mm:ss")&vbCrLf&"对"&List1.Te*t&"说:"&t*tSend.Te*t&vbCrLf&vbCrLf&t*tOutput.Te*tt*tSend.Te*t="E*itSubL1:MsgBo*"通信失败"cmdConnect.Enabled=TrueEndSubPrivateSubList1_Click()IfList1.Te*t<>Login.Usrn.Te*tThenSpeakto.Caption="对"&List1.Te*t&"说:"ElseMsgBo*"你选择了自己。"EndIfEndSubPrivateSubSckClient_DataArrival(ByValbytesTotalAsLong)DimstrDataAsString,ar,i%SckClient.GetDatastrData,vbStringIfLen(t*tOutput.Te*t)>512Thent*tOutput.Te*t="IfRight(strData,2)="||"ThenList1.Clearar=Split(strData,"||")Fori=0ToUBound(ar)Ifar(i)<>"
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024贵州毕节市织金县人力资源开发服务有限公司面向社会招聘8名派遣人员招聘笔试参考题库附带答案详解
- 2024湖南张家界市桑植县城市供水有限公司招聘12人笔试参考题库附带答案详解
- 2024广西玉林市自来水有限公司下半年公开招聘21人笔试参考题库附带答案详解
- 2025-2030年手腕康复理疗仪行业跨境出海战略研究报告
- 2025-2030年文具收纳用品店企业制定与实施新质生产力战略研究报告
- 2025-2030年基于AI的生产预测与调度机器人行业跨境出海战略研究报告
- 2025-2030年手腕按摩手环行业深度调研及发展战略咨询报告
- 2025-2030年变色绸带秀行业跨境出海战略研究报告
- 2025-2030年手腕康复理疗仪行业深度调研及发展战略咨询报告
- 2025-2030年微波速食米饭套装行业跨境出海战略研究报告
- 口腔颌面外科学 功能性外科
- 脊椎动物学知识点归纳各纲特征
- 光伏支架安装工程质量验收记录完整
- 波普解析PPT质谱教案资料
- GB/T 27476.5-2014检测实验室安全第5部分:化学因素
- 一级医院基本标准1
- 霍乱病例分析课件
- 金属非金属矿山重大生产安全事故隐患判定标准课件
- 四年级上册数学课件-一般应用题 全国通用(共26张PPT)
- 体检报告单入职体检模板
- 银行基本技能(第2版)电子教案
评论
0/150
提交评论