2017-07-26 181 views
-1

我在使用tcp客户端时遇到问题。当客户端开始他们的表单时,他们向我发送一个client.connect请求,当我打开我的表单时,我接受传入的请求,因此我们都连接并显示连接,但是当我关闭客户端表单时它仍然显示我们即使我们不是。TCP/IP客户端连接问题

Dim Listener As New TcpListener(4355) 
    Dim Client As New TcpClient 
    Dim Message As String 

    Private Sub Listen() 
    Try 
     Listener.Start() 


    Catch ex As Exception 

    End Try 
    End Sub 

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles 
    MyBase.Load 
    Control.CheckForIllegalCrossThreadCalls = False 
    'IP.Text = My.Settings.IP 
    Try 
     Dim Listening As New Thread(New ThreadStart(AddressOf Listen)) 
     Listening.Start() 


    Catch ex As Exception 
     Application.Restart() 
    End Try 
    Sending1.Focus() 
    End Sub 

    Private Sub Timer2_Tick(sender As Object, e As EventArgs) Handles 
    Timer2.Tick 
    If Client.Connected = False Then 
     Label5.Text = "Disconnected" 
     Label5.ForeColor = Color.Red 
     Sending1.Enabled = False 
     Client = Listener.AcceptTcpClient() 'looping accept request 
    End If 
    If Client.Connected = True Then 
     Label5.Text = "Connected" 
     Label5.ForeColor = Color.Green 
     Sending1.Enabled = True 
    End If 
    End Sub 
+0

太少代码为我们能够重现,或发现任何问题。开始:此代码位于何处?在一个按钮?计时器?线?其他?请更新您的问题,以包含我们重现问题所需的最低代码。有关指导,请参阅[如何创建最小,完整和可验证示例](https://stackoverflow.com/help/mcve)。 –

+0

已更新,对此表示抱歉 – alan7811

+1

我看到您仍在使用Control.CheckForIllegalCrossThreadCalls = False。您_ **迫切** _需要摆脱这一点,并做[**适当的线程安全调用**](https://stackoverflow.com/documentation/vb.net/1913/threading/6235/performing-而是使用线程安全调用使用控制调用)。我不是这样说的,因为这是做这件事的最好方式,我这样说是因为_ **你必须!** _ –

回答

0

您可以使用ElseIf

If Client.Connected = False Then 
    Label5.Text = "Disconnected" 
    Label5.ForeColor = Color.Red 
    Sending1.Enabled = False 
    Client = Listener.AcceptTcpClient() 

ElseIf Client.Connected = True Then 
    Label5.Text = "Connected" 
    Label5.ForeColor = Color.Green 
    Sending1.Enabled = True 
End If 

希望它能帮助:)

+0

它没有区别。 OP没有给我们足够的代码来识别问题。 –

+0

已更新,对此感到遗憾。 – alan7811