⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 服务器1.frm

📁 在Visual Basic环境下基于winsock开发的CS结构网络通信程序。可以满足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 + -