pServer(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地址进行连接,则两者的连接速度将会有大幅度的提高。