📄 服务器1.frm
字号:
VERSION 5.00
Object = "{248DD890-BB45-11CF-9ABC-0080C7E7B78D}#1.0#0"; "MSWINSCK.OCX"
Begin VB.Form Form1
Caption = "Form1"
ClientHeight = 5940
ClientLeft = 60
ClientTop = 435
ClientWidth = 7860
LinkTopic = "Form1"
ScaleHeight = 5940
ScaleWidth = 7860
StartUpPosition = 3 'Windows Default
Begin VB.TextBox txtRecTime
Height = 375
Left = 5880
TabIndex = 2
Top = 240
Width = 1455
End
Begin VB.TextBox Text1
Height = 4935
Left = 4200
MultiLine = -1 'True
TabIndex = 1
Top = 720
Width = 3135
End
Begin VB.TextBox Text3
BeginProperty DataFormat
Type = 0
Format = "0"
HaveTrueFalseNull= 0
FirstDayOfWeek = 0
FirstWeekOfYear = 0
LCID = 2052
SubFormatType = 0
EndProperty
Height = 4935
Left = 360
MultiLine = -1 'True
TabIndex = 0
Top = 720
Width = 3015
End
Begin MSWinsockLib.Winsock wslisten
Left = 2760
Top = 120
_ExtentX = 741
_ExtentY = 741
_Version = 393216
End
Begin MSWinsockLib.Winsock Winsock1
Index = 0
Left = 3240
Top = 120
_ExtentX = 741
_ExtentY = 741
_Version = 393216
End
Begin VB.Label Label1
Caption = "接受次数:"
Height = 255
Left = 4680
TabIndex = 3
Top = 360
Width = 1095
End
End
Attribute VB_Name = "Form1"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
Private Using() As Boolean '定义一个布尔数组,用于表示Winsock1数组占用情况,从1开始,0不算
Dim Socknumber As Integer '曾经连接过的最大客户机数目,也就是Using达到过的最大下标
Private Sub Form_Load()
wslisten.LocalPort = 4242 '打开一个监听的socket
wslisten.Listen
Socknumber = 0 '初始化客户机数目
txtRecTime = 0
End Sub
Private Sub wslisten_ConnectionRequest(ByVal requestID As Long)
ReDim Preserve Using(Socknumber) '重新分配数组大小,并保持原来数值
If -1 = LookFree(requestID) Then
Socknumber = Socknumber + 1 '表示增加了一个客户连接
ReDim Preserve Using(Socknumber) '重新分配数组大小,并保持原来数值
Load Winsock1(Socknumber) '增加了一个新socket,作为Winsock1数组中的一员,用Socknumber编号
Winsock1(Socknumber).Accept requestID '用这个新建立的socket进行连接
'ReDim Preserve Using(Socknumber) '重新分配数组大小,并保持原来数值
Using(Socknumber) = True '因为已经连接,所以设为True,表示通讯状态
Text3.Text = Text3.Text & DateTime.Now & Socknumber & "新连接" & vbCrLf '显示对应信息
End If
End Sub
Private Sub Winsock1_DataArrival(index As Integer, ByVal bytesTotal As Long)
Dim c As String '用于接受数据
Winsock1(index).GetData c, vbString '根据index调用相对应的socket进行接收数据
Text1.Text = index & c & vbCrLf '显示接收的数据
txtRecTime = txtRecTime + 1
'Dim i As Integer
'For i = 1 To UBound(Using) '遍历所有连接
'If Not i = index Then '对于非发送方的其他连接
'If Using(i) Then '如果通信正常
'Winsock1(i).SendData "echo" & c '发送给它们信息
'DoEvents
'End If
'End If
'Next i
End Sub
Private Sub Form_Unload(Cancel As Integer)
Winsock1(0).Close
End Sub
Private Sub Winsock1_Close(index As Integer)
Winsock1(index).Close
Unload Winsock1(index)
Using(index) = False
'Text3.Text = Int(Text3.Text) - 1
Text3.Text = Text3.Text & index & " 连接关闭" & vbCrLf
End Sub
Public Function LookFree(requestID As Long) As Long
Dim i As Integer
For i = 1 To UBound(Using)
If Not Using(i) Then
Load Winsock1(i)
Winsock1(i).Accept requestID
Using(i) = True
Text3.Text = Text3.Text & i & "新连接" & vbCrLf '显示对应信息
LookFree = i
Exit Function
End If
Next i
LookFree = -1
End Function
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -