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

📄 form1.vb

📁 利用VB.Net编程实现PC与掌上电脑PPC间的双向通信 .
💻 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 + -