大雀软件园

首页 软件下载 安卓市场 苹果市场 电脑游戏 安卓游戏 文章资讯 驱动下载
技术开发 网页设计 图形图象 数据库 网络媒体 网络安全 站长CLUB 操作系统 媒体动画 安卓相关
当前位置: 首页 -> 技术开发 -> 程序开发 -> 如何用VB编写网络寻呼

如何用VB编写网络寻呼

时间: 2021-07-31 作者:daque

作家:岳兵提起icq的学名,喜好电脑的伙伴确定不会感触生疏的吧?icq即是互联网络上的寻寻呼机,不管什么功夫,只有你的伙伴在线,你只需在icq中输出他的id号子,你就不妨在互联网络上呼到他。icq因为其简单、赶快,且具有稠密的备案用户而一举变成互联网络上最时髦的搜集寻寻呼机,它简直变成每一个上钩用户的必备之物。当你在运用icq的功夫,能否会想过本人发端编写一个搜集寻寻呼机呢?这本来在vb中就不妨实行。   搜集传呼的道理即是当存户端步调贯穿效劳器时,经过效劳器探求所要呼唤的id号子,即使检验和测定到此用户且该用户正居于联网状况,则效劳器报告此用户的存户端步调相应主叫方存户端步调,而后在主叫方和被叫方创造贯穿后,两边就不妨谈天或举行其它的通讯。   在vb中编写搜集寻寻呼机须要创造两个步调,一个为存户端步调client,一个为效劳器端步调server。   一、在client工程中创造一个窗体,加载winsock控件,称为tcpclient,和议采用tcp。再介入四个文本框,用以输出效劳器的ip地方、效劳器端标语,被呼唤的搜集传呼id号以及用户登录id号。而后再在窗体中介入三个按钮,辨别定名为“贯穿”、“割断”和“退出”,点击“贯穿”按钮,并举行如次初始化贯穿,代码如次:  private sub command1_click()   if len(text1.text) = 0 and len(text2.text) = 0 then    msgbox ("请输出长机名或长机ip地方。")    exit sub   elseif len(text1.text) > 0 then    tcpclient.remotehost = text1.text    tcpclient.remoteport = text2.text   end if   tcpclient.connect   timer1.enabled = true  end sub  private sub command2_click()   tcpclient.close   '割断贯穿  end sub  private sub command3_click()   end  end sub  private sub form_load()   text2.text = "1001"  end sub  private sub tcpclient_connect()   tcpclient.senddata (text3.text&"@"&text4.text)  end sub  private sub tcpclient_dataarrival(byval bytestotal as long)   dim strdata as string   tcpclient.getdata strdata   strdata = strdata + "呼唤"   '在收到呼唤动静后弹出一对话框并表露主叫方id号子   msgbox (strdata)  end sub   二、在效劳器端server工程中也创造一个窗体,加载winsock控件,称为tcpserver,和议采用tcp,树立其index值为0,并在工程中增添模块。   实质如次:  private type activeuser   clientip as string '记载存户的ip地方   clientport as integer '记载暂时对话的端口   clientid as long '记载存户的id号子   clientconnected as boolean '存户贯穿状况,true表白已贯穿,false表白没有贯穿  end type  dim curuser() as activeuser  dim tcpindex as integer '盯梢暂时创造贯穿数   在form_load事变中介入如次代码:  private sub form_load()   tcpserver(0).protocol = scktcpprotocol   tcpserver(0).localport = 1001 '将 localport 属性树立为一个平头。   tcpserver(0).listen '而后挪用 listen 本领。   tcpindex = 1  end sub   筹备应答存户端步调的乞求贯穿,运用connectionrequest事变来应答户端步调的乞求,代码如次:  private sub tcpserver_connectionrequest (index as integer, byval requestid as long)   dim i as integer   on error goto errhandle   for i = 1 to tcpindex '采用一个清闲端口    if curuser(i).clientconnected = false and i <> tcpindex then     load tcpserver(i)     tcpserver(i).localport = curuser(i).clientport - 1     tcpserver(i).accept requestid     exit for    elseif curuser(i).clientconnected = false then     load tcpserver(i)     tcpserver(i).localport = port     if tcpserver(i).state <> sckclosed then      tcpserver(i).close     end if     tcpserver(i).accept requestid     exit for    end if    next doevents    '尝试贯穿能否胜利    if tcpserver(i).state = sckconnected then     if i = tcpindex then     '仍旧没有可用端口,记载存户的ip地方和端标语     tcpindex = tcpindex + 1     port = port + 1     redim preserve curuser(tcpindex)     curuser(i).clientip = tcpserver(i).remotehostip     curuser(i).clientconnected = true     curuser(i).clientport = port     curuser(tcpindex).clientconnected = false    else     curuser(i).clientip = tcpserver(i).remotehostip     curuser(i).clientport = port     curuser(i).clientconnected = true    end if   end if   exit sub  errhandle:   resume next   '查看控件的 state 属性,如未封闭,在接收新的贯穿之前封闭此贯穿。   if tcpserver(0).state <> sckclosed then    tcpserver(0).close    tcpserver(0).accept requestid '接收具备 requestid 参数的,贯穿。   end if  end sub  private sub tcpserver_dataarrival(index as integer, byval bytestotal as long)   dim i as integer   dim s as string   dim requid as long '主叫方id号子   dim searchid as long '被叫方id号子   on error goto errhandle   tcpserver(index).getdata s, vbstring '接受数据共存入s    if mid(s, i, 1) = "@" then   '辨别s中的主叫方和被叫方id号子    searhid = left(s, i - 1) '把号惠存mkey    requid = right(s, len(s) - i) 'id惠存requid   end if   '即使是乞求传呼某一id号子,则检索暂时此id用户能否登录(即curuser数组中能否生存此用户),而后发送消息,报告此用户相应呼唤并表露主叫用户id号子。   for i = 1 to tcpindex    if requid = curuser(i).clientid and curuser(i) .clientconnected = true then     tcpserver(i).senddata (searhid)    end if   next   exit sub  sub errhandle:   if err.number = sckbadstate then '贯穿不精确    curuser(i).clientconnected = false    curuser(i).clientip = ""    unload tcpserver(i)    resume next   end if end sub   本步调仅供给了用visual basic 编写搜集传呼的思绪和重要局部的实行进程,至于主叫方和被叫方创造贯穿后的通讯并未扩充,读者群若有爱好,可在这上面介入简直的实行代码,就不妨给本步调减少更多的功效,真实时谈天,语音对话等。即使在效劳器步调检索到被叫方时,辨别报告两者存户端步调,使主叫方和被叫方径直运用ip地方举行贯穿,则两者的贯穿速率将会有大幅度的普及。

热门阅览

最新排行

Copyright © 2019-2021 大雀软件园(www.daque.cn) All Rights Reserved.