计算机实验代码_第1页
计算机实验代码_第2页
计算机实验代码_第3页
计算机实验代码_第4页
计算机实验代码_第5页
已阅读5页,还剩36页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

用WINSOCK控件编写聊天程序在工具箱中增加Winsock控件,选中“MicrosoftWinsockControl6.0”1、设计Tcp服务器程序在窗体中加入一个Winsock控件,取名WinsockfwqTxtfs (发送)文本框Txtjs (接收)文本框Cmdexit (退出)按钮PrivateSubCmdexit_click()EndEndSndPrivateSubForm_Load()Txtfs.Visible=FalseTxtjs.Visible=FalseWinsockfwq.LocalPort=1001Winsockfwq.ListenEndSubPrivateSubTxtfs_Change()Winsockfwq.sendDataTxtfs.TextEndSubPrivateSubWinsockfwq_Close()Winsockfwq.CloseEndEndSubPrivateSubWinsockfwq_ConnectionRequest(ByvalrequestldAsLong)Txtfs.Visible=TrueTxtjs.Visible=TrueIfWinsockfwq.StateoSckclosedThenWinsockfwq.closeWinsockfwq.AcceptrequestedEndSubPrivateSubWinsockfwq_DataArrival(ByvalbytesTotalAsLong)DimtmPstrAsStringWinsockfwq.GetDatatmPstrTxtjs.Text=tmPstrEndSub2、设计Tcp客户端程序在窗体中加入Winsock,取名为WinsockkhdTxtzjm (主机名)文本框Txtfs (发送)文本框Txtjs (接收)文本框Cmdexit (退出)按钮Cmdlj (连接)按钮PrivateSubCmdlj_Click()Winsockkhd.ConnectEndSubPrivateSubCmdexit_Click()EndEndSubPrivateSubForm_Load()Txtfs.Visble=FalseTxtjs.Visible=FalseWinsockkhd.RemotePort=1001Winsockkhd.RemoteHost=n0"EndSubPrivateSubTxtzjm_Change()Winsockkhd.RemoteHost=Txtzjm.TextEndSubPrivateSubTxtfs_Change()Winsockkhd.SendDataTxtfs.TextEndSubPrivateSubWinsockkhd_Close()Winsockkhd.CloseEndEndSubPrivateSubWinsockkhd_DataArrval(ByvalbytesTotalAsLong)DimtmPstrAsStringWinsockkhd.GetDatatmPstrTxtjs.Text=tmPstrEndSubOptionExplicitPrivateIgnoreTextAsBoolean, 各控件说明 ,一名称 类型 作用 ,frmMainFormCHAT主窗体,Winsock1Winsock连接控件,Label1LabelCONNECTWITHIP标签fLabel2LabelLOCALPORT标签labelsLabelREMOTEPORT标签^xtRemotelPTextBox远程IP地址输入框,txtLocalPortTextBox本地PORT输入框,txtRemotePortTextBox远程PORT输入框,cmdConnectCommandButton连接CONNECT按钮*Label4LabelTypeyourtextandhitEntertosendit.标签,Frame^remoteip)FrameREMOTEIP框架,Frame2(hostip)FrameHOSTIP框架,TextlTextBox显示对方(远程主机)发送的CHAT内容fText2TextBox输入己方(本地主机)要发送的CHAT内容,按ENTER键发送^mdClearCommandButton清空输入框(TEXT2)和显示框(TEXT1)中的内容,StatusBar1StatusBar状态栏'当CLEAR按钮按下时,清空TEXT1和TEXT2中的内容PrivateSubcmdClear_Click()Textl=WithText2‘清空输入框.Text="”'并把焦点置于TEXT2.SetFocusEndWithEndSub•当CONNECT按钮按下时,进行以下操作PrivateSubcmdConnect_Click()OnErrorGoToErrHandlerWithWinsockl'设置RemoteHost属性.RemoteHost=Trim(txtRemotelP)'设置RemotePort属性,RemotePort属性的值应该等于远程主机上的LocalHost属性的值.RemotePort=Trim(txtRemotePort)localPort属性的值是不能改变的,必须检查它是否已经被设置,如果LocalPort属性为空(没有被设置),将其设为在LocalPort输入框中输入的数值If.LocalPort=EmptyThen.LocalPort=Trim(txtLocalPort)Frame2.Caption=.LocalIP’这是必须的,Bind方法的作用是为控件“保留”•个本地端口,防止被其他用户调用。.Bind.LocalPortEndIfEndWith'为了保证使用者不能改变LocalPort的值,将txtLocalPort输入框锁定txtLocalPort.Locked=True'在状态栏中显示“正在连接”的状态StatusBarl.Panels(1).Text="正在连接'*&Winsockl.RemoteHost&H"“如果连接正常,做以下设置Framel.Enabled=TrueFrame2.Enabled=TrueLabel4.Visible=TrueText2.SetFocusExitSub’如果在连接过程中出现错误,则转向ErrHandler:,并显示错误提示ErrHandler:MsgBox”连接远程主机失败!”,vbCriticalEndSub'当窗体加载时显示提示信息并在txtRemotelP框中显示本地主机的IPPrivateSubForm_Load()ShowtxtRemotelP=Winsockl.LocallPEndSubPrivateSubLabel5_Click()EndSub,接收TEXT2输入框的按键,并做响应PrivateSubText2_KeyPress(KeyAsciiAsInteger)'定义变量Last_Line_Feed来记录最后输入行的位置StaticLast_Line_FeedAsLong完义New_Line字符串记录新键入的一行文本的内容DimNew_LineAsString'如果使用者按下CLEAR按钮对输入框内容清空,这时TEXT2为空,则重设最后输入行的位置为0IfTrim(Text2)=vbNullStringThenLast_Line_Feed=0'当使用者按下ENTER键时IfKeyAscii=13Then'取得最后输入行的内容并赋值给New_Line字符串New_Line=Mid(Text2,Last_Line_Feed+1)'重设最后输入行的位置Last_Line_Feed=Text2.SelStart,通过WINSOCK发送新输入的一行文本的内容Winsockl.SendDataNew_Line'在状态栏显示发送信息StatusBar1.Panels(2).Text="发送"&(LenB(New_Line)/2)&H字节”EndIfEndSubPrivateSubtxtRemotelP_Change()EndSub•当WINSOCK接收到新的数据(信息)时,进行以下响应PrivateSubWinsock1_DataArrival(ByValbytesTotalAsLong),定义New_Text字符串来记录新接收的信息DimNew_TextAsString'接收信息并赋值给New_TextWinsockl.GetDataNew_Text,在TEXT1显示框中显示新接收到的信息Text1.SelText=New_TextFramel.Caption=Winsockl.RemoteHostIP’在状态栏中显示接收信息StatusBar1.Panels(2).Text="接收到"&bytesTotal&”字节”EndSub用VB实现聊天讨论室和点对点会话在一个单位内部或通过广域协议(如X.25)互联的行业内部都有几十或上万台计算机互联,用Intranet虽然可以建•聊天室,但实现点对点实时对话却比较困难。本人用Winsock和VB自制了一套聊天室和对话系统,特拿来供同行们参考。•Winsock的主要属性、事件和方法Winsock是不可见控件,控件文件名是MSWINSCK.OCX,全称为Mcirosoftwinsskcontrol,使用时要将此控件调入工具箱。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(模拟服务器端)。forml中装入控件:控件名主要属性用途VB.Formformlcaption』雷萌聊天室”controlbox=01False模拟客户机表单VB.Textboxtextlmultiline=-1*Truescrollbars=3'Bath用于输入发往聊天室的信息VB.Textboxtext2locked=-14Truemultiline=-1Truescrollbars=3'Bath显示从聊天室发来的信息VB.Comboboxcomboltext="1”任定默认地址放入常用的地址VB.Commandbuttoncommlcaption="退出”最小化form1VB.Commandbuttoncomm2caption」'连接”请求与输入的地址连接VB.Commandbuttonsendcaption="发送”发送Textl中的内容VB.Labellabel1caption="请在此输入发表的信息”Textl的框标VB.LabelIabel2caption=%W天室或对方的信息”Text2的框标VB.LabelIabel3caption=”等待连接”显示连接状态信息VB.LabelIabel4caption="聊天室或对方地址”用于指示CombolVB.Labellabelscaptions操作:选地址连接,连接成功看到聊天室内容后再输信息发送操作说明VB.Timertimeriinterval=6000;enabled=false防止连接超时MSWinsocklib.winsocka用了数据传输form2中装入控件:控件名主要属性用途VB.Formform2caption="接收信息”controlbox=0"False模拟客户机表单VB.Commandbuttoncommandlcaption="返回”隐含Form2窗口VB.Commandbuttoncommand2caption—'对话"点对点会话时用此直接启动FormlVB.Textboxtext1Iocked=-1*Truemultiline=-1'Truescrollbars=3Bath存放聊天或对话内容VB.Labellabel1caption="接收的信息”Textl的框标MSWinsocklib.Winsocka用于监听MSWinsocklib.Winsockb用于传送聊天信息⑵在Forml的各控件事件中加入如下代码:DimflagAsBoolean注释:连接状态变量PrivateSuba_Connect()flag=TruePrivateSuba_DataArrival(ByVaibytesTotalAsLong)DimiAsStringa.GetDataiLabel3.Caption="连接成功!”Comm2.MousePointer=0Forml.MousePointer=0Timeri.Enabled=FalseIfi=Chr(O)ThenText2.Text="你是今天第一个进入本聊天室的客户。”+Chr(13)+Chr(1O)ElseText2.Text=Text2.Text+iEndIfText2.SelStart=Len(Text2.Text)Send.MousePointer=0Combol.Enabled=FalseComm2.Caption="断开连接〃Textl.SetFocusEndSubPrivateSuba_Error(ByValNumberAsInteger,DescriptionAsString,ByVaiScodeAsLong,ByVaiSourceAsString,ByVaiHelpFileAsString,ByVaiHelpContextAsLong,CancelDisplayAsBoolean)flag=FalseTimeri.Enabled=FalseComm2.MousePointer=0Form1.MousePointer=0MsgBox”网络连接失败!"Label3.Caption=”等待连接”Combol.Enabled=TrueCombol.SetFocusa.CloseComm2.Caption="连接”EndSubPrivateSubComm1_Click()a.Close注释:关闭连接Form1.WindowState=1PrivateSubComm2_Click()IfComm2.Caption="断开连接“Thena.CloseComm2.Caption="连接”Label3.Caption="等待连接"Combol.Enabled=TrueTmerl.Enabled=FalseComm2.MousePointer=0Form1.MousePointer=0ElseText2.7ext="HLabel3.Caption="正在连接Comm2.MousePointer=11Form1.MousePointer=11Timerl.Enabled=Trueflag=Falsea.Protocol=sckTCPProtocola.RemoteHost=Combol.Texta.RemotePort=3000a.ConnectEndIfPrivateSubForm_DblClick()IfMsgBox("关闭本聊天室!确认吗?”,36,“退出系统")=6ThenEndElseForm1.WindowState=1EndIfEndSubPrivateSubForm_Load()IfApp.PrevInstanceThenMsgBox”本系统已经加载,请看任务拦!”,48,“提示”EndEndIfflag=FalseLoadForm2'读入form2进入监听EndSubPrivateSubSend_Click()DimSAsStringOnErrorGolbffff'防止链路中断Send.MousePointer=11IfRight(lext1.'Text,1)<>Chr(10)ThenS=Textl.lext+Chr(13)+Chr(10)ElseS=Textl.lextEndIfIfflagThena.SendDataSEndIfExitSubffff:MsgBox”连接中断!*48,“提示“a.CloseSend.MousePointer=0Comm2.Caption=”连接“Label3.Caption="等待连接”Combol.Enabled=TrueComm2.MousePointer=0Form1.MousePointer=0ExitSubEndSubPrivateSubTimeri_7imer()flag=FalseUmerl.Enabled=FalseComm2.MousePointer=0Form1.MousePointer=0MsgBox”网络连接失败(超时)!"Label3.Caption=”等待连接”Combol.Enabled=TrueCombol.SetFocusa.CloseComm2.Caption=〃连接”EndSub⑶在Form2的各控件事件中加入如下代码:Constmaxn=200'最大同时连接本机的客户数Dimuser(maxn)AsBooleanPrivateSubCommand1_Click()Form2.HideEndSubPrivateSubCommand2_Click()LoadFormlForm1.ShowEndSubPrivateSubForm_Load()Dimstr1AsStringForm2.Caption="雷萌通信软件”注释:winsock控件a作为服务器程序监听a.LocalPort=3000a.ListenEndSubPrivateSuba_ConnectionRequest(ByValrequestIDAsLong)DimiAsLongFori=1lbmaxn'当一客户请求时给启动-"Winsock控件标志号IfNotuser(i)Thenuser(i)=TrueExitForEndIfNextiIfi>maxnThenExitSubLoadb(i)'当一客户请求时启动一Winsock控件“i).AcceptrequestlD注释:实际建立连接If诂)(11.询价=""7116(1注释:发送数据b(i).SendDataChr(O)Elseb(i).SendDatalextl.lextEndIfForm2.ShowEndSubPrivateSubs_Close(lndexAsInteger)b(lndex).CIose注释:关闭连接Unloadb(lndex)注释:卸载一个WinSock控件user(lndex)=FalseEndSubPrivateSubb_DataArrival(lndexAsInteger,ByVaibyteslbtalAsLong)DimstrAsStringDimiAsLongb(lndex).GetDatastrlextl.lext=lextl.lext+strFori=1lbmaxnIfuser(i)Thenb(i).SendDatastrEndIfNextiEndSub图1.1系统整体流程VB利用UDP制作简单的点对点聊天程序收藏VERSION5.00Object=[248DD890-BB45-1ICF-9ABC-0080C7E7B78D}#1.0#0”;nMSWINSCK.OCXMBeginVB.FormfrmMainBorderStyle=1'FixedSingleCaption="点对点聊天”ClientHeight=5175ClientLeft=45ClientTop=360Clientwidth=6720KeyPreview= -1TrueLinkTopic="Forml”LockControls=-1TrueMaxButton=0'FalseScaleHeight=5175ScaleWidth=6720StartUpPosition=2'屏幕中心BeginVB.TimertimerCheckConnectEnabled=0'FalseInterval=10000Left=2160Top=4560EndBeginVB.TextBoxtextSendHeight=1455Left=120MultiLine=-1TrueScrollBars=2VerticalTabindex二4Top=3000Width=6495EndBeginVB.CommandButtoncmdConnectCaption="连接(&C)”Default= -1TrueHeight=375Left=5640Tabindex=2Top=160Width=975EndBeginVB.TextBoxtextPortHeight=270Left=4440

Tabindex=1Text“5300”Top200Width855EndBeginMSWinsockLib.WinsockwskLeft1320Top4680_ExtentX741_ExtentY741_Version393216EndBeginVB.CommandButtoncmdExitCancel-1TrueCaption”退出(&X)”Height375Left5640Tabindex6Top4640Width975EndBeginVB.CommandButtoncmdSendCaption”发送(&S)”Height375Left4680Tabindex5Top4640Width975EndBeginVB.TextBoxtextAddressHeight270Left1440Tabindex0Top200Width1695EndBeginVB.TextBoxtextMessageHeight2175Left120MultiLine-1TrueScrollBars2VerticalTabindex=3Top-680Width6495EndBeginVB.LabelLabel1Caption =”输入聊天端口:Height =255Left =3240Tabindex =8Top =240Width =1215EndBeginVB.LabelIMsgCaption =”输入聊天的IP:Height =255Left =120Tabindex =7Top =240Width =1335EndEndAttributeVB_Name=',frmMain,,AttributeVB_GlobalNameSpace=FalseAttributeVB_Creatable=FalseAttributeVB_Predec1aredid=TrueAttributeVB_Exposed=False'发送消息函数PrivateDeclareFunctionSendMessageLib"user32'1AliasnSendMessageA"(ByVaihwndAsLong,ByVaiwMsgAsLong,ByVaiwParamAsLong,IParamAsAny)AsLong'使滚动条自动下拉PrivateConstWM_VSCROLL=&H115PrivateConstSB^BOTTOM=7标识对方是否在线PrivateisOnlineAsBoolean'动画窗体(使指定窗体闪动好提示对方有消息来了)PrivateDeclareFunctionFlashWindowLibMuser32M(ByVaihwndAsLong,ByVaiblnvertAsLong)AsLong验证IP的合法性PrivateDeclareFunctioninet_addrLib"ws2_32.dll"(ByVaicpAsString)AsLong’显示XP风格函数PrivateDeclareSubInitCommonControlsLib"comctl32.dll"()PrivateSubForm_Initialize()'显示XP风格InitCommonControlsPrivateSubcmdConnect_Click()'IP地址不能为空IftextAddress.Text=,,MThenMsgBox”请输入对方的IP地址或者计算机名!!”,vbCrilical,“错误”textAddress.SetFocusExitSubElse'当是以IP地址连接方式下IfInStr(textAddress.Text,n.n)Then'当IP地址不合法Ifinet_addr(textAddress.Text)=-1ThenMsgBox"请检查你的IP合法性!!",vbCritical,"提示"'选择输入的字符串textAddress.SelStart=0textAddress.SelLength=Len(textAddress.Text)textAddress.SetFocusExitSubEndIfEndIfEndIf‘端口不能为空IftextPort.Text=,,nThenMsgBox”请输入聊天的端口号!!”,vbCritical,“错误”textPort.SetFocusExitSubElse,端口必须是数字IfNotIsNumeric(textPort.Text)ThenMsgBox”请输入1-65536之间的数字!!”,vbCritical,“错误”'选择输入的字符串textPort.SelStart=0textPort.SeiLength=Len(textPort.Text)textPort.SetFocusExitSubElse'对数字进行验证IfCLng(textPort.Text)<1AndCLng(textPort.Text)>65536ThenMsgBox”请输入1-65536之间的数字!! vbCritical,"错误textPort.SetFocusExitSubEndIfEndIfEndIf'连接对方发送在线消息(在连接前先断开连接)wsk.Close'指明自己的连接端口wsk.LocalPort=textPort.Text'对方的连接端口wsk.RemotePort=textPort.Text'对方的IP或者计算机名wsk.RemoteHost=textAddress.Textwsk.Bind'发送在线消息wsk.SendData"Online**A_A**"&wsk.LocallP'禁用连接按钮和IP地址栏以及端口textAddress.Enabled=FalsetextPort.Enabled=FalsecmdConnect.Enabled=FalsetimerCheckConnect.Enabled=TrueEndSubPrivateSubcmdExit_Click()UnloadMeEndSubPublicSubcmdSend_Click()DimstrSendAsString'发送消息给对方IftextSend.Text<>""Then,验证IP和端口IftextAddress.Text<>""AndtextPort.Texto""Then’判断是否在线IfisOnlineThenstrSend=ReplaceExceptiveString(textSend.Text)wsk.SendDatastrSend&“**八_八**"&wsk.LocallPtextMessage.Text=textMessage.Text&vbNewLine&wsk.LocallP&”"&Format(Now,nyyyy年-mm月-dd日HH:MM:SSU)&vbNewLine&textSend.TexttextSend.Text=vbNullStringSendMessagetextMessage.hwnd,WM_VSCROLL,SB_BOTTOM,0Else’如果不在线恢复可用连接状态MsgBox”对方不在线上!!”,vbCritical,"提示“cmdConnect.Enabled=TruetextAddress.Enabled=TruetextPort.Enabled=TrueEndIfElseMsgBox”请检查IP地址和端口号是否合法!!",vbCritical,"提示”ExitSubEndIfEndIfEndSub'替换特殊字符串函数PrivateFunctionReplaceExceptiveString(ByValstrCheckAsString)AsString'这里替换的字符我用chr(O)因为正常是输入不了这个字符的IfLeft(strCheck,13)=HOnline**A_A**nThenReplaceExceptiveString=String(8,Chr(0))&Mid(strCheck,14,Len(strCheck)-13)ElselfLeft(strCheck,15)=MOnlineOK**A_A**nThenReplaceExceptiveString=String(10,Chr(O))&Mid(strCheck,16,Len(strCheck)-15)ElselfLeft(strCheck,12)="Leave**A_A**nThenReplaceExceptiveString=String(6,Chr(0))&Mid(strCheck,13,Len(strCheck)-12)ElseRep!aceExceptiveString=strCheckEndIfEndFunction还原特殊字符串函数PrivateFunctionRestoreExceptiveString(ByVaistrCheckAsString)AsStringIfLeft(strCheck,10)=String(10,Chr(0))ThenRestoreExceptiveString=nOnlineOK**A_A**"&Mid(strCheck,11,Len(strCheck)-10)ElselfLeft(stiCheck,8)=String(8,Chr(O))ThenRestoreExceptiveString="Online**A_A**"&Mid(strCheck,9,Len(strCheck)-8)ElselfLeft(strCheck,6)=String(6,Chr(O))ThenRestoreExceptiveString="Leave**A_A**n&Mid(strCheck,7,Len(strCheck)-6)ElseRestoreExceptiveString=strCheckEndIfEndFunctionPrivateSubForm_Load()hHook=SetWindowsHookEx(WH_KEYBOARD,AddressOfKeyboardProc,App.hlnstance,App.ThreadID)’指定协议类型为UDPwsk.Protocol=sckUDPProtocol'锁住信息显示栏Me.textMessage.Locked=TrueEndSubPrivateSubForm_Unload(CancelAsInteger)UnhookWindowsHookExhHook,当退出程序发送离线消息OnErrorResumeNextwsk.SendData"Leave**A_A**M&wsk.LocallPEndSub检测对方是否在线PrivateSubtimerCheckConnect_Timer()IfNotisOnlineThenMsgBox”对方不在线,或者是网络有问题!!”,vbCritical,“错误”'恢复可连接状态textAddress.Enabled=TruetextPort.Enabled=TruecmdConnect.Enabled=TruetimerCheckConnect.Enabled=FalseEndIfEndSub,Winsock消息接收事件PrivateSubwsk_DataArrival(ByVaibytesTotalAsLong)'消息过滤DimstrMessageAsString,strArrayOAsStringOnErrorResumeNext'接收类型为字符串wsk.GetDatastrMessage,vbString'格式化字符串(自定义协议的时候可以根据自己的爱好,但是在分割字符串的符号上最好是不要太容易重复的标识以防消息判断错误)strArray=Split(strMessage,"**A_"**")’如果是上线消息IfLeft(strMessage,13)="Online**八_八**"ThenIftextMessage.Texto,,HThentextMessage.Text=textMessage.Text&vbNewLine&strArray(1)&"在"&Format(Now,Hyyyy年・mm月・dd日HH:MM:SSH)&”上线了!!"&vbNewLineElsetextMessage.Text=strArray(l)&"在“&Formal(Now,“yyyy年・mm月・dd日HH:MM:SS")&“上线了!!"&vbNewLineEndIf'给对方发送你已经在线了wsk.SendData,,OnlineOK**A_A**n&wsk.LocallP'设置处于上线状态isOnline=True'关闭检测在线记时器timerCheckConnect.Enabled=False'自动下来滚动条SendMessagetextMessage.hwnd,WM_VSCROLL,SB_BOTTOM,0‘扇动窗体好知道有消息来了FlashWindowMe.hwnd,1'禁用连接按钮和IP地址栏以及端口textAddress.Enabled=FalsetextPort.Enabled=FalsecmdConnect.Enabled=False'接收到对方已经在线了ElselfLeft(strMessage,15)="OnlineOK**A_A**HThen'显示对方已经在线了IftextMessage.Text<>ThentextMessage.Text=textMessage.Text&vbNewLine&strArray(l)&"在"&Format(Now,"yyyy年・mm月-dd日HH:MM:SSM)&”上线了!!”&vbNewLineElsetextMessage.Text=strArray(l)&"在"&Formal(Now,"yyyy年・mm月・dd日HH:MM:SSn)&”上线了!!"&vbNewLineEndIf'设置在线标识isOnline=True'关闭检测在线记时器timerCheckConnect.Enabled=False'自动下来滚动条SendMessagetextMessage.hwnd,WM_VSCROLL,SB_BOTTOM,0'扇动窗体好知道有消息来了FlashWindowMe.hwnd,1'禁用连接按钮和IP地址栏以及端口textAddress.Enabled=FalsetextPort.Enabled=FalsecmdConnect.Enabled=FalseElselfLeft(strMessage,12)=nLeave**A_A**HThen'当对方离线了IftextMessage.Text<>ThentextMessage.Text=textMessage.Text&vbNewLine&strArray(l)&"在"&Format(Now,"yyyy年-mm月-dd日HH:MM:SSM)&”离线了!!”&vbNewLineElsetextMessage.Text=strArray(l)&"在"&Format(Now,"yyyy年・mm月・dd日HH:MM:SS'*)&”离线了!!”&vbNewLineEndIf'设置离线标识isOnline=False”恢复可连接状态textAddress.Enabled=TruetextPort.Enabled=TruecmdConnect.Enabled=True'自动下来滚动条SendMessagetextMessage.hwnd,WM_VSCROLL,SB.BOTTOM,0‘扇动窗体好知道有消息来了FlashWindowMe.hwnd,1Else',般聊天内容textMessage.Text=textMessage.Text&vbNewLine&strArray(l)&0"&Format(Now,uyyyy年・mm月-dd日HH:MM:SS'*)&vbNewLine&RestoreExceptiveString(strArray(O))&vbNewLine'自动下来滚动条SendMessagetextMessage.hwnd,WM_VSCROLL,SB_BOTTOM,0‘扇动窗体好知道有消息来了FlashWindowMe.hwnd,1EndIfEndSubPrivateSubwsk_Error(ByVaiNumberAsInteger,DescriptionAsString,ByVaiScodeAsLong,ByVaiSourceAsString,ByVaiHelpFileAsString,ByVaiHelpContextAsLong,CancelDisplayAsBoolean)'当有错误产生显示错误信息MsgBoxDescription“恢复可连接状态textAddress.Enabled=TruetextPort.Enabled=TruecmdConnect.Enabled=TrueEndSubAttributeVB_Name=umodKeyBoard"OptionExplicitPrivateConstWM_KEYDOWN=&H100PrivateConstWM_KEYUP=&H101PrivateConstWM_SYSKEYDOWN=&H104PrivateConstWM_SYSKEYUP=&HiO5PublicConstWH_KEYBOARD=2PrivateConstVK_CONTROL=&H11DeclareFunctionCallNextHookExLib,,user32n(ByVaihHookAsLong,ByVaincodeAsLong,ByVaiwParamAsLong,1ParamAsAny)AsLongDeclareFunctionGetKeyStateLib,,user32,'(ByVainVirtKeyAsLong)AsIntegerDeclareFunctionSetWindowsHookExLib"user32"AliasMSetWindowsHookExAu(ByVaiidHookAsLong,ByVaiIpfnAsLong,ByVaihmodAsLong,ByVaidwThreadldAsLong)AsLongDeclareFunctionUnhookWindowsHookExLib,,user32n(ByVaihHookAsLong)AsLongPublichHookAsLongPublicFunctionKeyboardProc(ByValidHookAsLong,ByVaiwParamAsLong,ByVai1ParamAsLong)AsLongIfidHook<0ThenKeyboardProc=CallNextHookEx(hHook,idHook,wParam,ByVai1Param)ElseIf(GetKeyState(VK_CONTROL)And&H8000)AndwParam=13ThenIffrmMain.textSend.Text<>nnThenfrmMain.cmdSend_ClickKeyboardProc=1ExitFunctionEndIfKeyboardProc=CallNextHookEx(hHook,idHook,wParam,ByVaiIParam)EndIfEndFunction本文来自CSDN博客,转载请标明出处/chenhui530/archive/2007/10/01/1809130.aspxL属性:①Protocol:。//使用TCP协议②R6moteHost〃准备连接远程机的IP地址③RemotePorW连接远程机的1P端口号(1024—65535之间)④LocalPort//本地机监听IP端口号必须与呼叫机端口号相同2•方法:①connect〃申请连接远程机②listen//设置监听③accept//建立实际连接④senddata//发送数据⑤geldata//接收数据⑥close〃关闭连接3•事件:①connectionrequest//一方请求连接时另一方产生②connect//一方机接受连接时另一方产生③close//一方机关闭连接时另一方产生④dataArrival//力发送数据另方产生⑤error〃请求连接失败时产生二♦制作方法⑴在工程中添加两个表单forml(模拟客户端)、form2(模拟服务器端)。forml中装入控件:控件名主要属性用途VB.Formformlcaption:”雷萌聊天室”controlbox=04False模拟客户机表单VB.lextboxtextlmultilinearTruescrollbars=3kBath用于输入发往聊天室的信息VB.Textboxtext2locked=-1Truemultiline=-rTruescrollbars=3*Bath显示从聊天室发来的信息VB.Comboboxcombo1texl="L任定默认地址放入常用的地址VB.Commandbuttoncomm1caption退出”最小化formlVB.Commandbultoncomm2caption一连接”请求与输入的地址连接VB.Commandbuttonsendcapiion="发送”发送lextl中的内容VB.Labellabel1caption=”请在此输入发表的信息”Textl的框标VB.Labellabel2caption="JP天室或对方的信息”Text2的框标VB.Labellabel3caption=”等待连接”显示连接状态信息VB.Labellabel4caption="聊天室或对方地址”用于指示Combo1VB.Labellabel5caption="操作:选地址连接,连接成功看到聊天室内容后再输信息发送”操作说明VB.Timertimcrlinterval=6000;enabled=false防止连接超时MSWinsocklib.winsocka用于数据传输form2中装入控件:控件名主要属性用途VB.Formform2caption="接收信息”controlbox=()kFalse模拟客户机表单VB.Commandbuttoncommand1caplion="返回”隐含Form2窗口VB.Commandbuttoncommand2caplion="对话"点对点会话时用此直接启动FormlVB.Textboxtext1locked=-14Truemultiline=-riruescrollbars=3kBath存放聊天或对话内容VB.Labcllabcllcaption="接收的信息”Text)的框标MSWinsocklib.Winsocka用于监听MSWinsocklib.Winsockb用于传送聊天信息⑵在Forml的各控件事件中加入如下代码:DimflagAsBoolean注释:连接状态变量PrivateSuba_Connect()flag=TrueEndSubPrivateSuba_DataArrival(ByValbytesrR)talAsLong)DimiAsStringa.GetDataiLabel3.Caption="连接成功!"Comm2.MousePointer=0Form1.MousePointer=0TimerI.Enabled=FalseIfi=Chr(O)ThenText2.1bxt="你是今天第一个进入本聊天室的客户。”Chr(13)ChitlO)ElseText2.1ext=Text2.1extiEndlfText2.SelStart=Len(rIext2.1ext)Scnd.MouscPointer=0Combol.Enabled=FalseComm2.Caption="断开连接”Textl.SetFocusEndSubPrivateSuba_Error(ByValNumberAsInteger,DescriptionAsString,ByValScodeAsLong,ByValSourceAsString,ByValHelpFileAsString,ByValHelpContextAsLong,CancelDisplayAsBoolean)flag=F

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论