用VB编写网络寻呼机

2016-02-19 18:10 0 1 收藏

给自己一点时间接受自己,爱自己,趁着下午茶的时间来学习图老师推荐的用VB编写网络寻呼机,过去的都会过去,迎接崭新的开始,释放更美好的自己。

【 tulaoshi.com - 编程语言 】

提起ICQ的大名,爱好电脑的朋友一定不会感到陌生的吧?ICQ就是互联网上的寻呼机,无论什么时候,只要你的朋友在线,你只需在ICQ中输入他的ID号码,你就可以在互联网上呼到他。ICQ由于其方便、快捷,且拥有众多的注册用户而一举成为互联网上最流行的网络寻呼机,它几乎成为每一个上网用户的必备之物。当你在使用ICQ的时候,是否会想过自己动手编写一个网络寻呼机呢?这其实在VB中就可以实现。
  ----网络寻呼的原理就是当客户端程序连接服务器时,通过服务器搜索所要呼叫的ID号码,如果检测到此用户且该用户正处于联网状态,则服务器通知此用户的客户端程序响应主叫方客户端程序,然后在主叫方和被叫方建立连接后,双方就可以聊天或进行其它的通信。
  
  ----在VB中编写网络寻呼机需要建立两个程序,一个为客户端程序Client,一个为服务器端程序Server。
  
  ----一、在Client工程中建立一个窗体,加载WinSock控件,称为tcpClient,协议选择TCP。再加入四个文本框,用以输入服务器的IP地址、服务器端口号,被呼叫的网络寻呼ID号以及用户登录ID号。然后再在窗体中加入三个按钮,分别命名为“连接”、“断开”和“退出”,点击“连接”按钮,并进行如下初始化连接,代码如下:
  
  PrivateSubCommand1_Click()
  IfLen(Text1.Text)=0AndLen(Text2.Text)=0Then
  MsgBox("请输入主机名或主机IP地址。")
  ExitSub
  ElseIfLen(Text1.Text)0Then
  tcpClient.RemoteHost=Text1.Text
  tcpClient.RemotePort=Text2.Text
  EndIf
  tcpClient.Connect
  Timer1.Enabled=True
  EndSub
  
  PrivateSubCommand2_Click()
  tcpClient.Close   '断开连接
  EndSub
  
  PrivateSubCommand3_Click()
  End
  EndSub
  
  PrivateSubForm_Load()
  Text2.Text="1001"
  EndSub
  
  PrivateSubtcpClient_Connect()
  tcpClient.SendData(Text3.Text&"@"&Text4.Text)
  EndSub
  
  PrivateSubtcpClient_DataArrival(ByVal
  bytesTotalAsLong)
  DimstrDataAsString
  tcpClient.GetDatastrData
  strData=strData "呼叫" 
  '在收到呼叫消息后弹出一对话框并显示主叫方ID号码
  MsgBox(strData)
  EndSub
  
  ----二、在服务器端Server工程中也建立一个窗体,加载WinSock控件,称为tcpServer,协议选择TCP,设置其Index值为0,并在工程中添加模块。
  ----内容如下:
  
  PrivateTypeActiveUser
  ClientIPAsString'记录客户的IP地址
  ClientPortAsInteger'记录当前会话的端口
  ClientIDAsLong'记录客户的ID号码
  ClientConnectedAsBoolean
  '客户连接状态,True表示已连接,False表示没有连接
  EndType
  DimCurUser()AsActiveUser
  DimtcpIndexAsInteger'跟踪当前建立连接数
  
  在Form_Load事件中加入如下代码:
  PrivateSubForm_Load()
  tcpServer(0).Protocol=sckTCPProtocol
  tcpServer(0).LocalPort=1001
  '将LocalPort属性设置为一个整数。
  tcpServer(0).Listen'然后调用Listen方法。
  tcpIndex=1
  EndSub
  
  ----准备应答客户端程序的请求连接,使用ConnectionRequest事件来应答户端程序的请求,代码如下:
  PrivateSubtcpServer_ConnectionRequest
  (IndexAsInteger,ByValrequestIDAsLong)
  DimiAsInteger
  OnErrorGoToErrHandle
  Fori=1TotcpIndex'选择一个空闲端口
  IfCurUser(i).ClientConnected=
  FalseAnditcpIndexThen
  LoadtcpServer(i)
  tcpServer(i).LocalPort=CurUser(i).ClientPort-1
  tcpServer(i).AcceptrequestID
  ExitFor
  ElseIfCurUser(i).ClientConnected=FalseThen
  LoadtcpServer(i)
  tcpServer(i).LocalPort=Port
  IftcpServer(i).StatesckClosedThen
  tcpServer(i).Close
  EndIf
  tcpServer(i).AcceptrequestID
  ExitFor
  EndIf
  Next
  DoEvents
  '测试连接是否成功
  IftcpServer(i).State=sckConnectedThen
  Ifi=tcpIndexThen
  '已经没有可用端口,记录客户的IP地址和端口号
  tcpIndex=tcpIndex 1
  Port=Port 1
  ReDimPreserveCurUser(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
  EndIf
  EndIf
  ExitSub
  ErrHandle:
  ResumeNext
  '检查控件的State属性,如未关闭,在接受新的连接之前关闭此连接。
  IftcpServer(0).StatesckClosedThen
  tcpServer(0).Close
  tcpServer(0).AcceptrequestID
  '接受具有requestID参数的,连接。
  EndSub
  
  PrivateSubtcpServer_DataArrival(IndexAsInteger,
  ByValbytesTotalAsLong)
  DimiAsInteger
  DimsAsString
  DimRequIDAsLong'主叫方ID号码
  DimSearchIDAsLong'被叫方ID号码
  
  OnErrorGoToErrHandle
  tcpServer(Index).GetDatas,vbString
  '接收数据并存入s 
  IfMid(s,i,1)="@"Then
  '分离s中的主叫方和被叫方ID号码
  SearhID=Left(s,i-1)'把号存入mKey
  RequID=Right(s,Len(s)-i)'ID存入RequID
  EndIf
  
  ----'如果是请求寻呼某一ID号码,则检索当前此ID用户是否登录(即CurUser数组中是否存在此用户),然后发送信息,通知此用户响应呼叫并显示主叫用户ID号码。
  Fori=1TotcpIndex
  IfRequID=CurUser(i).ClientIDAndCurUser(i)
  .ClientConnected=TrueThen
  tcpServer(i).SendData(SearhID)
  EndIf
  Next
  ExitSub
  ErrHandle:
  IfErr.Number=sckBadStateThen'连接不正确
  CurUser(i).ClientConnected=False
  CurUser(i).ClientIP=""
  UnloadtcpServer(i)
  ResumeNext
  EndIf
  EndSub
  
  ----本程序仅提供了用VisualBasic编写网络寻呼的思路和主要部分的实现过程,至于主叫方和被叫方建立连接后的通信并未扩展,读者若有兴趣,可在这方面加入具体的实现代码,就可以给本程序增加更多的功能,如实时聊天,语音对话等。如果在服务器程序检索到被叫方时,分别通知两者客户端程序,使主叫方和被叫方直接利用IP地址进行连接,则两者的连接速度将会有大幅度的提高。->

来源:https://www.tulaoshi.com/n/20160219/1616963.html

延伸阅读
'' Q B a s i c N i b b l e s'' Copyright (C) Microsoft Corporation 1990'' Nibbles is a game for one or two players. Navigate your snakes' around the game board trying to eat up numbers while avoiding' running into walls or other snakes....
一、WindowsCGI ----通用网关接口CGI是服务器与应用程序之间的接口,在编写HTML文件时可结合其他程序语言使客户通过浏览器将数据输入到文件里,经服务器处理后转送给客户或记录在服务器的数据库中。任何一种程序设计语言写的程序,若可在服务器主机上运行并可用CGI接口来传递数据,就可作为CGI应用程序,这种语言可被称为CGI程序语言或脚本...
三、CGI编程实例 本节将用VB编写一个处理主页客户留言簿的CGI程序。除了要调用本文前面所介绍的Win32API函数外,程序中还调用了Win32API函数GetTempFileName()来获得一个唯一的临时文件名。程序中的函数UrlDecode()用来对客户端的输入进行URL译码。函数GetCgiValue()则用来分解字符串,根据表单元素的NAME属性获取其VALUE值,并调用Ur...
利用通用网关接口(CGI) Web服务器可以执行一些外部程序 并将这些外部程序所产生的输出结果和Web服务器所管理的静态文本 图像和声音融合在一起传给相应的Web浏览器。当客户机的浏览器向Web服务器请求一个HTML文件时 服务器在收到请求后就去寻找这个文件并将找到的文件传送给客户机。而当客户机的请求是一个CGI程序时 Web服务器将激活客户...
平时我们在过马路的时候常常会看到指挥交通的红绿灯,它的权利可大了,要是我们可以控制它就好了,虽然在现实生活中办不到,就让我们编写一个虚拟的红绿灯程序,也来过过控制红绿灯的瘾。 下面我们就开始编写吧。 第一件事当然是新建一个工程,然后引入所需控件。在“红绿灯”程序中,我们需要用到的控件有:OptionButton(选项按钮)...

经验教程

404

收藏

39
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部