📄 form1.vb
字号:
Imports System.Net.Sockets
Imports System.Text
Imports System.Threading
Public Class Form1
Inherits System.Windows.Forms.Form
Private Listener As TcpListener
Private Listening As Boolean = False
#Region " Windows 窗体设计器生成的代码 "
Public Sub New()
MyBase.New()
'该调用是 Windows 窗体设计器所必需的。
InitializeComponent()
'在 InitializeComponent() 调用之后添加任何初始化
End Sub
'窗体重写 dispose 以清理组件列表。
Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)
If disposing Then
If Not (components Is Nothing) Then
components.Dispose()
End If
End If
MyBase.Dispose(disposing)
End Sub
'Windows 窗体设计器所必需的
Private components As System.ComponentModel.IContainer
'注意: 以下过程是 Windows 窗体设计器所必需的
'可以使用 Windows 窗体设计器修改此过程。
'不要使用代码编辑器修改它。
Friend WithEvents Label1 As System.Windows.Forms.Label
Friend WithEvents Button1 As System.Windows.Forms.Button
Friend WithEvents TextBox1 As System.Windows.Forms.TextBox
Friend WithEvents TextBox2 As System.Windows.Forms.TextBox
Friend WithEvents Label2 As System.Windows.Forms.Label
Friend WithEvents Label3 As System.Windows.Forms.Label
Friend WithEvents tmProcessRequest As System.Windows.Forms.Timer
Friend WithEvents lbReceived As System.Windows.Forms.ListBox
<System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()
Me.components = New System.ComponentModel.Container
Me.lbReceived = New System.Windows.Forms.ListBox
Me.Label1 = New System.Windows.Forms.Label
Me.Button1 = New System.Windows.Forms.Button
Me.TextBox1 = New System.Windows.Forms.TextBox
Me.TextBox2 = New System.Windows.Forms.TextBox
Me.Label2 = New System.Windows.Forms.Label
Me.Label3 = New System.Windows.Forms.Label
Me.tmProcessRequest = New System.Windows.Forms.Timer(Me.components)
Me.SuspendLayout()
'
'lbReceived
'
Me.lbReceived.ItemHeight = 12
Me.lbReceived.Location = New System.Drawing.Point(8, 72)
Me.lbReceived.Name = "lbReceived"
Me.lbReceived.Size = New System.Drawing.Size(376, 280)
Me.lbReceived.TabIndex = 0
'
'Label1
'
Me.Label1.Location = New System.Drawing.Point(8, 48)
Me.Label1.Name = "Label1"
Me.Label1.Size = New System.Drawing.Size(376, 23)
Me.Label1.TabIndex = 1
Me.Label1.TextAlign = System.Drawing.ContentAlignment.MiddleLeft
'
'Button1
'
Me.Button1.Location = New System.Drawing.Point(320, 16)
Me.Button1.Name = "Button1"
Me.Button1.Size = New System.Drawing.Size(64, 24)
Me.Button1.TabIndex = 2
Me.Button1.Text = "开始侦听"
'
'TextBox1
'
Me.TextBox1.Location = New System.Drawing.Point(88, 16)
Me.TextBox1.Name = "TextBox1"
Me.TextBox1.Size = New System.Drawing.Size(104, 21)
Me.TextBox1.TabIndex = 3
Me.TextBox1.Text = "192.168.0.100"
'
'TextBox2
'
Me.TextBox2.Location = New System.Drawing.Point(248, 16)
Me.TextBox2.Name = "TextBox2"
Me.TextBox2.Size = New System.Drawing.Size(64, 21)
Me.TextBox2.TabIndex = 4
Me.TextBox2.Text = "10200"
'
'Label2
'
Me.Label2.Location = New System.Drawing.Point(8, 16)
Me.Label2.Name = "Label2"
Me.Label2.Size = New System.Drawing.Size(80, 23)
Me.Label2.TabIndex = 5
Me.Label2.Text = "本机IP地址:"
Me.Label2.TextAlign = System.Drawing.ContentAlignment.MiddleRight
'
'Label3
'
Me.Label3.Location = New System.Drawing.Point(192, 16)
Me.Label3.Name = "Label3"
Me.Label3.Size = New System.Drawing.Size(56, 23)
Me.Label3.TabIndex = 6
Me.Label3.Text = "端口号:"
Me.Label3.TextAlign = System.Drawing.ContentAlignment.MiddleRight
'
'tmProcessRequest
'
Me.tmProcessRequest.Interval = 200
'
'Form1
'
Me.AutoScaleBaseSize = New System.Drawing.Size(6, 14)
Me.ClientSize = New System.Drawing.Size(392, 366)
Me.Controls.Add(Me.Label3)
Me.Controls.Add(Me.TextBox1)
Me.Controls.Add(Me.TextBox2)
Me.Controls.Add(Me.Label2)
Me.Controls.Add(Me.Button1)
Me.Controls.Add(Me.Label1)
Me.Controls.Add(Me.lbReceived)
Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle
Me.MaximizeBox = False
Me.MinimizeBox = False
Me.Name = "Form1"
Me.Text = "PC_Server"
Me.ResumeLayout(False)
End Sub
#End Region
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
If Not Listening Then '已经停止侦听,检测是否有TcpListener实例,没有创建之,有则启动侦听
If Listener Is Nothing Then
'创建TcpListener对象的实例
Listener = New TcpListener(System.Net.IPAddress.Parse(TextBox1.Text), CInt(TextBox2.Text))
End If
Try
'在指定的端口开始侦听
Listener.Start()
Listening = True
Label1.Text = "正在 " + TextBox1.Text + ":" + TextBox2.Text + " 处侦听....."
Me.Button1.Text = "停止侦听"
TextBox1.Enabled = False
TextBox2.Enabled = False
Me.Refresh()
tmProcessRequest.Enabled = True
Catch ex As Exception
MsgBox(ex.Message)
End Try
Else '正在侦听,则停止侦听
Listener.Stop()
tmProcessRequest.Enabled = False
Label1.Text = "已经停止在 " + TextBox1.Text + ":" + TextBox2.Text + " 处侦听"
Label1.Refresh()
Me.Button1.Text = "开始侦听"
Listening = False
End If
End Sub
Private Sub tmProcessRequest_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles tmProcessRequest.Tick
'声明创建线程时,使用 ThreadStart 委托作为其唯一参数的构造函数创建 Thread 类的新实例
Dim CurThreadStart As ThreadStart
Dim CurThread As Thread
'检测侦听器是否有挂起的连接请求,没有则退出计时器事件
If Not Listener.Pending() Then
Exit Sub
End If
'有连接的请求则将计时器暂停,准备进行处理
tmProcessRequest.Enabled = False
'创建线程委托,传递需要操作的过程的地址
CurThreadStart = New ThreadStart(AddressOf ProcessRequest)
CurThread = New Thread(CurThreadStart)
'开始一个线程
CurThread.Start()
'重新启动计时器
tmProcessRequest.Enabled = True
End Sub
'获取来自PPC客户端的数据并放入列表中
Protected Sub ProcessRequest()
' 出于安全考虑,应将侦听器编写为侦听特定的客户端。
' 如果它侦听所有请求,它可能会收到大量的请求。
'
Dim CurThread As Thread
Dim CurSocket As Socket
Dim Buffer(100) As Byte
Dim Bytes As Integer
Dim ReceivedData, BacktoClientData As String
CurThread = System.Threading.Thread.CurrentThread()
CurSocket = Listener.AcceptSocket
While Listening
If CurSocket.Available > 0 Then
Bytes = CurSocket.Receive(Buffer, Buffer.Length, 0)
ReceivedData = Encoding.UTF8.GetString(Buffer)
SyncLock CurThread
lbReceived.Items.Add(ReceivedData)
End SyncLock
Exit While
End If
Application.DoEvents()
If Not CurSocket.Connected Then
Listening = False
End If
End While
'通过暂停来模拟由侦听器执行的操作。
System.Threading.Thread.CurrentThread().Sleep(500)
'格式化返回消息 - 这通常是服务器端处理的结果。
BacktoClientData = System.DateTime.Now
Buffer = Encoding.UTF8.GetBytes(BacktoClientData.ToCharArray)
'通过打开的套接字将结果发送回客户端应用程序,然后
'关闭该套接字。
CurSocket.Send(Buffer, Buffer.Length, 0)
CurSocket.Close()
End Sub
End Class
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -