Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/7.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 我的程序可以';t从TCP连接读取ASCII字符串,保持循环_Vb.net_Visual Studio_Tcp - Fatal编程技术网

Vb.net 我的程序可以';t从TCP连接读取ASCII字符串,保持循环

Vb.net 我的程序可以';t从TCP连接读取ASCII字符串,保持循环,vb.net,visual-studio,tcp,Vb.net,Visual Studio,Tcp,我正在连接到服务器的特定TCP端口,执行一些操作,我需要在某个点断开连接,然后等待服务器再次打开其端口并重新连接 我的程序永远循环 为了断开与服务器的连接,我从服务器发送了字符串“TCP:OFF”并关闭端口(服务器端)。每当我的程序读取这一行时,我希望它关闭连接并等待服务器再次打开其端口。这是因为TCP/IP协议 问题是,在我将鼠标放在窗口上之前,服务器发送的特定ASCII字符串不会被读取(奇怪)。最后,我希望我的程序能够在没有人为干预的情况下自行运行并最小化 我的网络流读取时间一定有问题 代码

我正在连接到服务器的特定TCP端口,执行一些操作,我需要在某个点断开连接,然后等待服务器再次打开其端口并重新连接

我的程序永远循环

为了断开与服务器的连接,我从服务器发送了字符串“TCP:OFF”并关闭端口(服务器端)。每当我的程序读取这一行时,我希望它关闭连接并等待服务器再次打开其端口。这是因为TCP/IP协议

问题是,在我将鼠标放在窗口上之前,服务器发送的特定ASCII字符串不会被读取(奇怪)。最后,我希望我的程序能够在没有人为干预的情况下自行运行并最小化

我的网络流读取时间一定有问题

代码

While tcpClient.Connected() = False
        Try
            tcpClient.ReceiveTimeout = 1000
            tcpClient.SendTimeout = 1000
            tcpClient.Connect("192.168.10.100", 10003)
            Console.WriteLine("Connection OK")
            System.Threading.Thread.Sleep(1000)
        Catch ex As Exception
            Console.WriteLine("ERRORR : Server unreachable")
            System.Threading.Thread.Sleep(1000)
        End Try
    End While

Dim networkStream As NetworkStream = tcpClient.GetStream()

If networkStream.CanRead And networkStream.DataAvailable Then
        Try
            ReadData = ""
            Dim myReadBuffer As Byte() = New Byte(7) {}
            Dim numberOfBytesRead = networkStream.Read(myReadBuffer, 0, myReadBuffer.Length)
            ReadData = Encoding.ASCII.GetString(myReadBuffer, 0, numberOfBytesRead)
            Console.Write(ReadData & vbCrLf)
        Catch ex As Exception
            Console.Write("Error reading data")
        End Try
    End If

    If ReadData = "TCP:OFF" Then
        tcpClient.Close()
        ReadData = ""
        Console.WriteLine("Closing connection")
        System.Threading.Thread.Sleep(5000)
        tcpClient = New TcpClient
    End If

我正在最新的Visual Studio中运行一个Windows窗体程序。

我猜您正在UI线程上运行此代码。尝试在单独的线程中运行它。对不起,我不太熟悉多线程,我忘了告诉你我是一个编程新手。。。目前,我的代码运行在以下子模块中:
protectedoverrides子模块WndProc(ByRef m As System.Windows.Forms.Message)
,这意味着我必须将代码的网络部分与其余部分分开?@AlexisRobin yes。如果您运行一些sleep或等待函数返回,UI将冻结,除非您将该逻辑放入线程中。您究竟为什么要在
WndProc
中运行它???那绝对不是合适的地方。至少您需要为它创建自己的单独方法(=sub)。不过,您真正需要做的是在单独的线程中运行它。有关更多信息,请参阅和。好的,谢谢大家的建议!我将在本周末阅读它以了解我的工作^^^,因此我将把我所有的代码放在一个单独的线程中,因为我不会对我的UI做任何事情(只是一个带有冻结消息的TxtBox)