📄 frmtcpclient.frm
字号:
VERSION 5.00
Object = "{248DD890-BB45-11CF-9ABC-0080C7E7B78D}#1.0#0"; "mswinsck.ocx"
Object = "{831FDD16-0C5C-11D2-A9FC-0000F8754DA1}#2.0#0"; "mscomctl.ocx"
Begin VB.Form frmTCPClient
Caption = "TCP客户端"
ClientHeight = 6015
ClientLeft = 6510
ClientTop = 1035
ClientWidth = 6165
LinkTopic = "Form1"
MaxButton = 0 'False
MinButton = 0 'False
ScaleHeight = 6015
ScaleWidth = 6165
Begin VB.TextBox txtServerName
Height = 270
Left = 1440
TabIndex = 17
Top = 232
Width = 1455
End
Begin VB.CommandButton cmdSendData
Caption = "发送信息"
Height = 375
Left = 720
TabIndex = 10
Top = 5160
Width = 1095
End
Begin MSComctlLib.StatusBar StatusBar1
Align = 2 'Align Bottom
Height = 375
Left = 0
TabIndex = 9
Top = 5640
Width = 6165
_ExtentX = 10874
_ExtentY = 661
_Version = 393216
BeginProperty Panels {8E3867A5-8586-11D1-B16A-00C0F0283628}
NumPanels = 1
BeginProperty Panel1 {8E3867AB-8586-11D1-B16A-00C0F0283628}
AutoSize = 1
Object.Width = 10372
Object.ToolTipText = "客户端状态"
EndProperty
EndProperty
End
Begin VB.Timer Timer1
Interval = 500
Left = 2640
Top = 3720
End
Begin VB.CommandButton cmdExit
Caption = "退出"
Height = 375
Left = 4080
TabIndex = 8
Top = 5160
Width = 1215
End
Begin VB.CommandButton cmdDisconnect
Caption = "断开连接"
Height = 375
Left = 3840
TabIndex = 7
Top = 1320
Width = 1215
End
Begin VB.CommandButton cmdConnect
Caption = "连接"
Height = 375
Left = 720
TabIndex = 6
Top = 1320
Width = 1215
End
Begin VB.TextBox txtSend
Height = 975
Left = 240
MultiLine = -1 'True
ScrollBars = 3 'Both
TabIndex = 4
Top = 4080
Width = 5655
End
Begin VB.TextBox txtReceive
Height = 1695
Left = 240
Locked = -1 'True
MultiLine = -1 'True
ScrollBars = 3 'Both
TabIndex = 2
Top = 2040
Width = 5655
End
Begin MSWinsockLib.Winsock sckTCPClient
Left = 3120
Top = 3720
_ExtentX = 741
_ExtentY = 741
_Version = 393216
End
Begin VB.TextBox txtServerPort
Height = 270
Left = 1440
MaxLength = 5
TabIndex = 1
Top = 592
Width = 1455
End
Begin VB.Label Label4
Caption = "服务器名:"
Height = 255
Left = 240
TabIndex = 20
Top = 240
Width = 1095
End
Begin VB.Label Label5
Caption = "本地主机名:"
Height = 255
Left = 3240
TabIndex = 19
Top = 240
Width = 1095
End
Begin VB.Label ClientName
Height = 255
Left = 4320
TabIndex = 18
Top = 240
Width = 1335
End
Begin VB.Label ClientPort
Height = 255
Left = 4320
TabIndex = 16
Top = 600
Width = 1575
End
Begin VB.Label ClientIP
Height = 255
Left = 4320
TabIndex = 15
Top = 960
Width = 1455
End
Begin VB.Label ServerIP
Height = 255
Left = 1440
TabIndex = 14
Top = 960
Width = 1575
End
Begin VB.Label Label8
Caption = "服务器IP:"
Height = 255
Left = 240
TabIndex = 13
Top = 960
Width = 1095
End
Begin VB.Label label7
Caption = "本地端口:"
Height = 255
Left = 3240
TabIndex = 12
Top = 600
Width = 1095
End
Begin VB.Label label6
Caption = "本地IP地址:"
Height = 255
Left = 3240
TabIndex = 11
Top = 960
Width = 1095
End
Begin VB.Label Label3
Caption = "发送信息:"
Height = 255
Left = 240
TabIndex = 5
Top = 3840
Width = 2175
End
Begin VB.Label Label2
Caption = "接收信息:"
Height = 255
Left = 240
TabIndex = 3
Top = 1800
Width = 1935
End
Begin VB.Label Label1
Alignment = 1 'Right Justify
Caption = "服务器端口:"
Height = 255
Left = 240
TabIndex = 0
Top = 600
Width = 1095
End
End
Attribute VB_Name = "frmTCPClient"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
Option Explicit
'定义表示是否建立连接的标志:ConnectedFlag
Private ConnectedFlag As Boolean
''连接'按钮的click事件子过程,当鼠标单击连接按钮时执行此过程
Private Sub cmdConnect_Click()
On Error GoTo conncet_err
'给Winsock控件分配端口(LocalPort属性),0表示随机分配
sckTCPClient.LocalPort = 0
'设置Winsock控件的远程主机名(RemoteHost属性,即服务器的主机名)
sckTCPClient.RemoteHost = txtServerName.Text
'设置Winsock控件的远程主机端口(RemotePort属性,即服务器所打开的端口)
sckTCPClient.RemotePort = CLng(txtServerPort.Text)
'调用Winsock控件的Connect方法
sckTCPClient.Connect
'使能'断开连接'按钮,禁止'连接'按钮
cmdConnect.Enabled = False
cmdDisconnect.Enabled = True
connect_exit:
Exit Sub
conncet_err:
Select Case Err
Case 40014: MsgBox "端口属性值无效", vbExclamation Or vbOKOnly Or vbMsgBoxSetForeground, "客户端警告"
Case Else: MsgBox Err.Description, , vbExclamation Or vbOKOnly Or vbMsgBoxSetForeground, "客户端警告"
End Select
Resume connect_exit
End Sub
''关闭连接'按钮的click事件子过程,当鼠标单击关闭连接按钮时执行此过程
Private Sub cmddisconnect_Click()
'首先判断Winsock控件的状态
'如果Winsock已经处于连接的状态,则关闭当前的TCP连接
'置连接标志为“否”,使能'连接'按钮,禁止'断开连接'按钮和'发送信息'按钮
If sckTCPClient.State = sckConnected Then
sckTCPClient.Close
ConnectedFlag = False
cmdDisconnect.Enabled = False
cmdConnect.Enabled = True
cmdSendData.Enabled = False
ServerIP.Caption = ""
ClientPort.Caption = ""
End If
End Sub
''退出'按钮的click事件子过程,当鼠标单击退出按钮时执行此过程
Private Sub cmdExit_Click()
'卸载当前窗体
Unload Me
End Sub
''发送信息'按钮的click事件子过程,当鼠标单击发送信息按钮时执行此过程
Private Sub cmdSendData_Click()
'如果发送信息的文本框中的内容为'空',则退出此过程
If Trim(txtSend.Text) = "" Then
txtSend.Text = ""
Exit Sub
End If
'定义临时变量data
Dim data As String
' 打开错误处理程序
On Local Error GoTo SendData_error
'调用Winsock控件的senddata方法,将发送信息文本框中的信息发送出去
sckTCPClient.SendData txtSend.Text
If Len(txtReceive.Text) Then
data = vbCrLf & "客户端信息:" & txtSend.Text
Else
data = "客户端信息:" & txtSend.Text
End If
txtReceive.SelStart = Len(txtReceive.Text)
txtReceive.SelText = data
txtReceive.SelStart = Len(txtReceive.Text)
txtSend.Text = ""
SendData_exit:
Exit Sub
'错误处理程序
SendData_error:
'检查错误代号,显示错误信息
Select Case Err
Case sckBadState:
MsgBox Err.Description & vbCrLf & "未连接到服务器", vbExclamation Or vbOKOnly, "客户端警告"
Case Else:
MsgBox Err.Description & vbExclamation Or vbOKOnly, "客户端警告"
End Select
'在错误处理程序结束后,恢复原有的运行,返回到产生错误的语句
Resume SendData_exit
End Sub
'窗体装载子过程,当窗体装载时调用此过程
Private Sub Form_Load()
'使能'连接'按钮,禁止'断开连接'按钮和'发送信息'按钮
cmdConnect.Enabled = True
cmdDisconnect.Enabled = False
cmdSendData.Enabled = False
'初始化服务器名为'compouter',端口为“6000”,用户可以在此进行修改
txtServerName.Text = "computer"
txtServerPort.Text = "6000"
ConnectedFlag = False
ClientName.Caption = sckTCPClient.LocalHostName
ClientIP.Caption = sckTCPClient.LocalIP
End Sub
'窗体卸载子过程,当窗体卸载时调用此过程
Private Sub Form_Unload(Cancel As Integer)
'关闭Winsock控件
sckTCPClient.Close
End Sub
'Winsock控件关闭事件子过程,当远程计算机关闭连接时调用过程
Private Sub sckTCPClient_Close()
'如果已经处在连接的状态,则关闭连接,同时提示信息
If ConnectedFlag = True Then
If sckTCPClient.State = sckClosing Then
ConnectedFlag = False
MsgBox "到服务器的连接意外终止。", vbExclamation Or vbOKOnly, "客户端警告"
sckTCPClient.Close
cmdDisconnect.Enabled = False
cmdConnect.Enabled = True
cmdSendData.Enabled = False
ClientPort.Caption = ""
ServerIP.Caption = ""
End If
End If
End Sub
Private Sub sckTCPClient_Connect()
If ConnectedFlag = False Then
If sckTCPClient.State = sckConnected Then
sckTCPClient.SendData sckTCPClient.LocalHostName
ClientPort.Caption = sckTCPClient.LocalPort
ServerIP.Caption = sckTCPClient.RemoteHostIP
End If
txtSend.SetFocus
End If
End Sub
Private Sub sckTCPclient_DataArrival(ByVal bytesTotal As Long)
Dim data As String
If ConnectedFlag = True Then
sckTCPClient.GetData data
If Len(txtReceive.Text) Then
data = vbCrLf & "服务器信息:" & data
Else
data = "服务器信息:" & data
End If
txtReceive.SelStart = Len(txtReceive.Text)
txtReceive.SelText = data
txtReceive.SelStart = Len(txtReceive.Text)
Else
ConnectedFlag = True
sckTCPClient.GetData data
txtServerName.Text = data
txtSend.SetFocus
cmdSendData.Enabled = True
End If
End Sub
'Winsock控件的错误事件子过程
Private Sub sckTCPClient_Error(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)
'提示错误信息
Select Case Number
Case 10061
MsgBox "错误: " & Number & vbCrLf & Description & vbCrLf & vbCrLf & "服务器端未运行或未建立连接。", vbExclamation Or vbOKOnly Or vbMsgBoxSetForeground, "客户端警告"
Case 10049
MsgBox "错误: " & Number & vbCrLf & Description & vbCrLf & vbCrLf & "服务器端口属性值无效", vbExclamation Or vbOKOnly Or vbMsgBoxSetForeground, "客户端警告"
Case Else
MsgBox "错误: " & Number & vbCrLf & Description, vbOKOnly Or vbExclamation Or vbMsgBoxSetForeground, "客户端警告"
End Select
'关闭Winsock控件
sckTCPClient.Close
cmdConnect.Enabled = True
cmdDisconnect.Enabled = False
End Sub
'Timer的Timer事件子过程
Private Sub Timer1_Timer()
'监控客户端状态,并在状态栏中显示
Select Case sckTCPClient.State
Case 0: StatusBar1.Panels(1) = "客户端已关闭"
Case 6: StatusBar1.Panels(1) = "正在连接服务器"
Case 7: StatusBar1.Panels(1) = "已连接到服务器"
End Select
End Sub
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -