Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
VB.NET TCP客户端/服务器问题-在计时器上发送_Vb.net_Timer_Tcpclient_Tcplistener - Fatal编程技术网

VB.NET TCP客户端/服务器问题-在计时器上发送

VB.NET TCP客户端/服务器问题-在计时器上发送,vb.net,timer,tcpclient,tcplistener,Vb.net,Timer,Tcpclient,Tcplistener,因此,我的程序首先计算“XProcess”的进程数,并有一个计时器每1秒检查一次,效果非常好!我将计数输入到设置变量中。然后,我有一个子例程,它接受该设置变量,以及一条IF语句,以输出TCPClient正在发送字符串(“一个进程”) 问题是,我没有与子程序一起使用的事件,所以我将它与计时器绑定,每1秒发送一次消息。TCPClient立即将其发送到本地地址(127.0.0.1),然后发送到文本框。好问题 它一次又一次地重复(“一个过程”),我可以理解为什么会发生这种情况 那么,使用下面的代码,TC

因此,我的程序首先计算“XProcess”的进程数,并有一个计时器每1秒检查一次,效果非常好!我将计数输入到设置变量中。然后,我有一个子例程,它接受该设置变量,以及一条IF语句,以输出TCPClient正在发送字符串(“一个进程”)

问题是,我没有与子程序一起使用的事件,所以我将它与计时器绑定,每1秒发送一次消息。TCPClient立即将其发送到本地地址(127.0.0.1),然后发送到文本框。好问题

它一次又一次地重复(“一个过程”),我可以理解为什么会发生这种情况

那么,使用下面的代码,TCPClient如何向TCPServer和TCPServer发送“XProcess”中有多少个进程的通知,以显示一个或多个进程正在运行?(而out服务器不停地重复字符串(integer也可以工作)

下面的代码可以工作,但会重复以字符串形式运行的进程数

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
导入系统.Net
导入系统线程
导入System.Net.Sockets
导入System.IO
公共模块TCPServer

Dim Server=New TcpListener(IPAddress.Any,50000)”您不想这样做吗:

Dim data As [Byte]() = System.Text.Encoding.ASCII.GetBytes(My.Settings.TotalProcesses)
我不知道当你将值设置为零,然后在下一行检查值是否为1时,你怎么会说“一个进程”

My.Settings.TotalProcesses = 0
If My.Settings.TotalProcesses = 1 Then

注:“XPROCESS”指任何进程。是的,我有tvnviewer作为进程,但进程名称无关紧要。您的代码有点混乱,您的指示也不太清楚。你能解释一下这两个计时器要做什么吗?您正在启动第一个计时器(populating.totalprocesss),然后执行更多代码并调用另一个计时器(populating TextBlock1.Text)。假设这两个计时器都保持运行(每秒一次),只要没有.Stop()方法(尽管从逻辑上讲,没有执行前面提到的中间操作)。你能详细说明一下你到底想要什么吗?