下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
-.z1.效勞器端往效勞器窗體〔命名為frmServer〕添加三個(gè)控件,分別為LIST1〔存放在線好友〕,te*t1〔留言容〕和te*t2〔聊天記錄〕,程序如下:OptionE*plicitConstBusyAsBoolean=FalseConstFreeAsBoolean=TrueDimConnectState()AsBooleanDimSInde*DimUsrs(0To32)'在線人名PrivateSubForm_QueryUnload(CancelAsInteger,UnloadModeAsInteger)EndEndSubPrivateSubForm_Load()IfApp.PrevInstance=TrueThenMsgBo*"程序已在運(yùn)行",vbCriticalEndEndIfReDimPreserveConnectState(0)OnErrorResumeNe*tConnectState(0)=FreeListener.LocalPort=1001'端口號(hào)Listener.Listen'開場(chǎng)偵聽EndSubPrivateSubListener_ConnectionRequest(ByValrequestIDAsLong)DimSockInde*AsIntegerDimSockNumAsIntegerOnErrorResumeNe*tSockNum=UBound(ConnectState)IfSockNum>32ThenE*itSub'查找空閑的SckServerSockInde*=FindFreeSocket'如果已有的sock都忙,而且sock數(shù)不超過32個(gè),動(dòng)態(tài)添加sockIfSockInde*>SockNumThenLoadSckServer(SockInde*)ConnectState(SockInde*)=BusySckServer(SockInde*).Tag=SockInde*'承受請(qǐng)求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*)&"〞對(duì)“"&Replace(d*,"|","〞說:"&vbCrLf)&vbCrLf&Te*t2.Te*tOpenApp.Path&"\record.t*t"ForAppendAs*1Write*1,Format(Now(),"YY-MM-DDhh:mm:ss")&"“"&Usrs(Inde*)&"〞對(duì)“"&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.客戶端客戶端工程里添加兩個(gè)窗體〔Login和frmClient〕,分別如下列圖,把登陸窗體存放用戶名的文本框命名為USRN。程序代碼如下〔示,沒什么實(shí)際意義〕:PrivateSubForm_Load()IfApp.PrevInstance=TrueThenMsgBo*"程序已在運(yùn)行",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在對(duì)話窗體〔frmClient〕中添加三個(gè)對(duì)象,List1用于存放在線好友,單擊選中要交談的好友,T*tsend輸入要發(fā)送的信息,t*tOutput顯示收到的信息。Connect按鈕用于重新連接效勞器。程序如下:ConstComputerName="你的計(jì)算機(jī)名字或IP地址"PrivateSubForm_Load()'Winsock控件的名字為SckClient。注意:要指定遠(yuǎn)程主機(jī),可以使用'IP地址〔例如:"121.111.1.1"〕,也可以使用計(jì)算機(jī)的“好聽的名字〞。SckClient.RemoteHost=ComputerNameSckClient.RemotePort=1001SckClient.ConnectcmdConnect.Enabled=SckClient.State=sckClosedtEndSubPrivateSubcmdConnect_Click()'調(diào)用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&"對(duì)"&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="對(duì)"&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等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 同濟(jì)大學(xué)浙江學(xué)院《建筑設(shè)計(jì)Ⅱ》2023-2024學(xué)年第一學(xué)期期末試卷
- 鐵嶺師范高等??茖W(xué)校《計(jì)算化學(xué)初步》2023-2024學(xué)年第一學(xué)期期末試卷
- 天水師范學(xué)院《應(yīng)用數(shù)理統(tǒng)計(jì)》2023-2024學(xué)年第一學(xué)期期末試卷
- 液壓啟閉機(jī)課程設(shè)計(jì)
- 污水處理流程課程設(shè)計(jì)
- 消費(fèi)心理分析課程設(shè)計(jì)
- 數(shù)字出版行業(yè)相關(guān)投資計(jì)劃提議范本
- 核輻照改性產(chǎn)品行業(yè)相關(guān)投資計(jì)劃提議
- 不飽和聚酯樹脂相關(guān)行業(yè)投資規(guī)劃報(bào)告
- 農(nóng)用化學(xué)品相關(guān)行業(yè)投資方案
- 頑固性心力衰竭治療課件
- 《大學(xué)英語跨文化交際》課程教案
- 新員工職業(yè)素養(yǎng)培訓(xùn)
- 二年級(jí)安全教育期末測(cè)試題
- 個(gè)人車輛抵押借款合同
- 2022電大《建筑材料(A)》期末試題及答案
- 團(tuán)隊(duì)合作能力和創(chuàng)新團(tuán)隊(duì)建設(shè)試題100分標(biāo)準(zhǔn)答案
- 22秋中傳媒《傳播學(xué)概論》作業(yè)考核答卷
- 商務(wù)英語視聽說知到章節(jié)答案智慧樹2023年山東外國語職業(yè)技術(shù)大學(xué)
- 2023年化工企業(yè)隱患排查與治理培訓(xùn)
- 西安東原地產(chǎn)品牌年度推廣方案
評(píng)論
0/150
提交評(píng)論