您的位置:首页 > 编程语言 > VB

vb socket通信 1服务器N客户端(服务器使用同一端口)(1)

2009-02-18 10:34 423 查看
最近写了一个通过socket通信程序,要求1服务器N客户端(服务器使用同一端口),下面把代码贴出来,大家分享一下:

服务器端:
'定义常量
Const BUSY As Boolean = False
Const FREE As Boolean = True
'定义连接状态
Dim ConnectState() As Boolean

Private Sub Form_Load()
'
ReDim Preserve ConnectState(0 To 1)
On Error Resume Next
ConnectState(0) = FREE
ConnectState(1) = FREE
'指定网络端口号
Listener.LocalPort = 6005
'开始侦听
Listener.Listen

lblContent.Caption = "启动成功!"
End Sub

Private Sub Listener_ConnectionRequest(ByVal requestID As Long)
Dim SockIndex As Integer
Dim SockNum As Integer
On Error Resume Next
txtSql.Text = txtSql.Text & Chr(10) & "连接请求"

'查找连接的用户数
SockNum = UBound(ConnectState)
If SockNum > 14 Then
Form1.Print SockIndex & ""
Exit Sub
End If
'查找空闲的sock
SockIndex = FindFreeSocket()
'如果已有的sock都忙,而且sock数不超过15个,动态添加sock
If SockIndex > SockNum Then
Load scksever(SockIndex)
End If
ConnectState(SockIndex) = BUSY
scksever(SockIndex).Tag = SockIndex
'接受请求
scksever(SockIndex).Accept (requestID)
txtSql.Text = txtSql.Text & "接受请求"
End Sub

Private Sub scksever_Close(Index As Integer)
'
If scksever(Index).State <> sckClosed Then
scksever(Index).Close
End If
ConnectState(Index) = FREE

End Sub

Private Sub scksever_ConnectionRequest(Index As Integer, ByVal requestID As Long)
If scksever(Index).State <> 0 Then scksever(Index).Close
scksever(Index).Accept requestID
End Sub

Private Sub scksever_Error(Index As Integer, ByVal Number As Integer, Description As String, ByVal Scode As Long, ByVal source As String, ByVal HelpFile As String, ByVal HelpContext As Long, CancelDisplay As Boolean)
MsgBox "错误" & Number & Description, vbOKOnly, "注意!"
End Sub
'寻找空闲的sock
Public Function FindFreeSocket()
Dim SockCount, i As Integer
SockCount = UBound(ConnectState)
For i = 0 To SockCount
If ConnectState(i) = FREE Then
FindFreeSocket = i
Exit Function
End If
Next i
ReDim Preserve ConnectState(0 To SockCount + 1)
FindFreeSocket = UBound(ConnectState)
End Function
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐