Question

So my program starts out by counting how many processes of "XProcess" and has a timer to check every 1 second, which works great! I have the input of the count going into Setting variable. I then have a sub routine that takes that Setting variable, along with a IF statement to output that the TCPClient is sending the string ("One Process").

Well the issue is, I have no event to use with the sub routine and so I tied it in with the timer to send the message out every 1 second. The TCPClient sends it to a local address(127.0.0.1) right now, and sends it to a Textbox. Well PROBLEM!!!

It repeats ("One Process") over and over and over, which I can see why this happens.

So with the Code below, how can the TCPClient send an notification of how many processes of "XProcess" to the TCPServer and the TCPSERVER to spit out that 1 or more processes are running ? (with out the SERVER repeating the string (integer works as wel) over and over again)

The below works, but repeats how many processes are running as a string.

MainWindow.xaml.vb

Imports System.Windows.Threading
Imports System.Net.Sockets

Public Class MainWindow
    Private Run_ProgramRunCheck_timer As New DispatcherTimer
    Private Run_RecieveCheck_timer As New DispatcherTimer
    Dim processCount As Integer
    Private Sub Window_Loaded(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs) Handles MyBase.Loaded
        ServerStart()

        'Check for program changes every second

        ' Set interval for timer
        Run_ProgramRunCheck_timer.Interval = TimeSpan.FromMilliseconds(1000)


        'Start timer on button click
        Run_ProgramRunCheck_timer.Start()

        AddHandler Run_ProgramRunCheck_timer.Tick, AddressOf __ProgramCheck


        'Check for Message Recieve every second

        ' Set interval for timer
        Run_RecieveCheck_timer.Interval = TimeSpan.FromMilliseconds(1000)


        'Start timer on button click
        Run_RecieveCheck_timer.Start()

        AddHandler Run_RecieveCheck_timer.Tick, AddressOf _RecieveMessageConvert
        TCPClientSender()


    End Sub
    Public Sub __ProgramCheck()
        'This sub will be checked every 1 seconds for changes

        'Count number of processes
        processCount = Process.GetProcessesByName("tvnviewer").Count()
        My.Settings.TotalProcesses = processCount


    End Sub

    Public Sub TCPClientSender()
        My.Settings.TotalProcesses = 0
        If My.Settings.TotalProcesses = 1 Then
            Dim port As Int32 = 50000
            Dim client As New TcpClient("127.0.0.1", port)
            ' Translate the passed message into ASCII and store it as a Byte array.


            Dim data As [Byte]() = System.Text.Encoding.ASCII.GetBytes("One Process")

            ' Get a client stream for reading and writing. 
            '  Stream stream = client.GetStream(); 
            Dim stream As NetworkStream = client.GetStream()

            ' Send the message to the connected TcpServer. 
            stream.Write(data, 0, data.Length)
        End If



    End Sub

    Public Sub _RecieveMessageConvert()

        TextBlock1.Text = My.Settings.StoreSentMessage
    End Sub
End Class

TCPServer.vb

Imports System.Net
Imports System.Threading
Imports System.Net.Sockets
Imports System.IO

Public Module TCPServer

    Dim Server = New TcpListener(IPAddress.Any, 50000) ' <-- Listen on Port 50,000
    Dim Client As New TcpClient
    Private ServerThread As Thread = Nothing
    Dim Message As String = ""
    Private Threads As New List(Of Thread)

    Public Sub ServerStart()
        ServerThread = New Thread(AddressOf ConnectionListener)
        ServerThread.IsBackground = True
        ServerThread.Start()
    End Sub
    Private Sub ConnectionListener()
        Try
            Server.Start()

            While True

                Dim client As TcpClient = Server.AcceptTcpClient ' Blocks until Connection Request is Received



                Dim Reader As New StreamReader(client.GetStream())

                While Reader.Peek > -1
                    Message = Message + Convert.ToChar(Reader.Read()).ToString


                End While


                My.Settings.StoreSentMessage = Message



            End While
        Catch ex As Exception

        End Try

    End Sub




End Module
Was it helpful?

Solution

Dont you just want to do this:

Dim data As [Byte]() = System.Text.Encoding.ASCII.GetBytes(My.Settings.TotalProcesses)

I dont know how you ever get it to say "One Process" when you set the value to zero and then check if the value is 1 on the next line???

My.Settings.TotalProcesses = 0
If My.Settings.TotalProcesses = 1 Then
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top