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