将发送选项添加到vb.net侦听器

将发送选项添加到vb.net侦听器,vb.net,tcp,tcpclient,tcplistener,tcpserver,Vb.net,Tcp,Tcpclient,Tcplistener,Tcpserver,我有下面的代码用于侦听和计算接收到的字符串,但现在我需要添加一个选项,即单击按钮将预定义字符串发送回源代码 任何帮助或我需要研究的地方的指针将不胜感激,我花了几天的时间试图得到这项工作,但几乎没有成功 我突然发现的错误是,按钮单击子按钮中的行opensock2=New IO.StreamWriter(client.GetStream)未连接,因此我认为我需要从后台工作程序传递连接,或者在表单加载中导致连接,但我不知道如何做到这一点 非常感谢大家的帮助 干杯, 克里斯 Imports System

我有下面的代码用于侦听和计算接收到的字符串,但现在我需要添加一个选项,即单击按钮将预定义字符串发送回源代码

任何帮助或我需要研究的地方的指针将不胜感激,我花了几天的时间试图得到这项工作,但几乎没有成功

我突然发现的错误是,按钮单击子按钮中的行
opensock2=New IO.StreamWriter(client.GetStream)
未连接,因此我认为我需要从后台工作程序传递连接,或者在表单加载中导致连接,但我不知道如何做到这一点

非常感谢大家的帮助

干杯, 克里斯

Imports System.Net.Sockets
Imports System.Text

Public Class Form1
Private client As New System.Net.Sockets.TcpClient '("10.0.0.25", 4000)

Dim ipaddress(3) As Byte

Dim swon As String = "A55A6B0550000000FFFBDE0030C8" 'switch on
Dim swoff As String = "A55A6B0570000000FFFBDE0030E8" 'switch off
Dim but0 As String = "A55A6B0500000000FFFBDE002066" 'button release
Dim msg As String = "0000000000000000000000000000"
Dim t As Integer = "00"
Dim returndata As String = msg

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    Listener.RunWorkerAsync()
    Button2.Enabled = False
End Sub


Private Sub BackgroundWorker1_DoWork(ByVal sender As System.Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles Listener.DoWork
    ipaddress(0) = 10
    ipaddress(1) = 0
    ipaddress(2) = 0
    ipaddress(3) = 14

    Dim opensock As New Net.Sockets.TcpListener(New Net.IPAddress(ipaddress), 4000)

    Try
        opensock.Start()
    Catch ex As System.Net.Sockets.SocketException
        mess.Text = "cannot start connection"
    End Try
    Dim tcpClient As TcpClient = opensock.AcceptTcpClient()

    While True
        If Listener.CancellationPending Then
            e.Cancel = True
            opensock.Stop()

            Exit While
        End If
        Listener.ReportProgress(1)
        Dim networkStream As NetworkStream = tcpClient.GetStream()
        If networkStream.CanWrite And networkStream.CanRead Then
            Listener.ReportProgress(2)
            Dim bytes(tcpClient.ReceiveBufferSize) As Byte
            Try

                networkStream.Read(bytes, 0, CInt(tcpClient.ReceiveBufferSize))
            Catch ex As Exception
                Listener.ReportProgress(3)

            End Try
            returndata = Encoding.ASCII.GetString(bytes)
            Listener.ReportProgress(4)

        Else
            'returndata = msg
        End If
    End While
End Sub


Private Sub Listener_RunWorkerCompleted(ByVal sender As System.Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles Listener.RunWorkerCompleted

    t = 40 - (40 * CInt("&H" & (returndata.Substring(12, 2))) / 255)
    temp.Text = t
    comm.Text = returndata
    If e.Cancelled Then
        mess.AppendText("cancelled" + vbCrLf)
    End If

End Sub

Private Sub Listener_ProgressChanged(ByVal sender As System.Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs) Handles Listener.ProgressChanged
    Select Case e.ProgressPercentage
        Case 1
            mess.AppendText("connected" + vbCrLf)
            'comm.Text = msg
        Case 2
            mess.AppendText("Can read and write" + vbCrLf)
            mess.AppendText("data received" + vbCrLf)
        Case 3
            mess.AppendText("error" + vbCrLf)
        Case 4
            t = 40 - (40 * CInt("&H" & (returndata.Substring(12, 2))) / 255)
            temp.Text = t
            comm.Text = returndata
            mess.AppendText("Last temp" + vbCrLf)
    End Select

End Sub

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

    Dim opensock2 As IO.StreamWriter
    Try

        opensock2 = New IO.StreamWriter(client.GetStream)
        opensock2.WriteLine(swon)
        opensock2.WriteLine(but0)
        opensock2.Flush()
    Catch ex As Exception
        mess.AppendText(ex.ToString + vbCrLf)
    End Try

End Sub

End Class