Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Load
        oIPEndPint = New IPEndPoint(IPAddress.Parse(strIP), strPort)
        oSocket = New Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)
        oSocket.Connect(oIPEndPint)
        bytes = oSocket.Receive(oReciveByte, 1024, SocketFlags.None)
        If bytes > 0 Then
                strReceive = Encoding.ASCII.GetString(oReciveByte, 0, bytes)
                aString = Split(strReceive, "|")
                lblZGRSSX.Text = aString(1)
                lblRGRSSX.Text = aString(2)
                lblZGRS.Text = aString(3)
                lblRGRS.Text = aString(4)
        End If
        Dim threadRecive As New Thread(AddressOf reciveThreadstart)
        threadRecive.Start()
    End Sub
    Private Sub reciveThreadstart()
        If oSocket.Connected Then
            While True
                bytes = oSocket.Receive(oReciveByte, 1024, SocketFlags.None)
                If bytes > 0 Then
                    strReceive = Encoding.ASCII.GetString(oReciveByte, 0, bytes)
                    aString = Split(strReceive, "|")
                    lblZGRSSX.Text = aString(1)
                    lblRGRSSX.Text = aString(2)
                    lblZGRS.Text = aString(3)
                    lblRGRS.Text = aString(4)
                End If
            End While
        End If
    End Sub
    Private Sub frmDL_Closed(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Closed
    End Sub
    Private Sub frmDL_Closing(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles MyBase.Closing
            oSocket.Shutdown(SocketShutdown.Receive)
            oSocket.Close()
    End Sub
运行后关闭报:
未处理的“System.Net.Sockets.SocketException”类型的异常出现在 system.dll 中。
其他信息: 您的主机中的软件放弃了一个已建立的连接是由这句bytes = oSocket.Receive(oReciveByte, 1024, SocketFlags.None)语句造成的.请问我要怎么办?

解决方案 »

  1.   

        Private Sub frmDL_Closing(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles MyBase.Closing 
                oSocket.Shutdown(SocketShutdown.Receive) 
                oSocket.Close() 
        End Sub 
    在关闭窗口时断开连接
      

  2.   

    If oSocket.Connected Then 
    放到While循环中然后在循环中加上一句判断窗体是否要关闭的语句或者在 frmDL_Closing 里, oSocket.Shutdown之前加上一句结束reciveThreadstart线程,或等待其结束的语句
      

  3.   

    If oSocket.Connected Then 
    放到While循环中然后在循环中加上一句判断窗体是否要关闭的语句或者在 frmDL_Closing 里, oSocket.Shutdown之前加上一句结束reciveThreadstart线程,或等待其结束的语句
      

  4.   

    If oSocket.Connected Then  
     exit while
    end if 
    用这句问题依旧.
    你所说的"之前加上一句结束reciveThreadstart线程,或等待其结束的语"这个语句要如何写呢?
      

  5.   

            dim fClosing as boolean=false
            Dim threadRecive As New Thread(AddressOf reciveThreadstart) 
        Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Load 
            oIPEndPint = New IPEndPoint(IPAddress.Parse(strIP), strPort) 
            oSocket = New Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp) 
            oSocket.Connect(oIPEndPint) 
            bytes = oSocket.Receive(oReciveByte, 1024, SocketFlags.None) 
            If bytes > 0 Then 
                    strReceive = Encoding.ASCII.GetString(oReciveByte, 0, bytes) 
                    aString = Split(strReceive, " ¦") 
                    lblZGRSSX.Text = aString(1) 
                    lblRGRSSX.Text = aString(2) 
                    lblZGRS.Text = aString(3) 
                    lblRGRS.Text = aString(4) 
            End If 
    '        Dim threadRecive As New Thread(AddressOf reciveThreadstart) 
            fClosing=false
            threadRecive.Start() 
        End Sub     Private Sub reciveThreadstart() 
                While not fClosing
            If oSocket.Connected Then 
                    bytes = oSocket.Receive(oReciveByte, 1024, SocketFlags.None) 
                    If bytes > 0 Then 
                        strReceive = Encoding.ASCII.GetString(oReciveByte, 0, bytes) 
                        aString = Split(strReceive, " ¦") 
                        lblZGRSSX.Text = aString(1) 
                        lblRGRSSX.Text = aString(2) 
                        lblZGRS.Text = aString(3) 
                        lblRGRS.Text = aString(4) 
                    End If 
            End If 
                End While 
        End Sub 
        Private Sub frmDL_Closing(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles MyBase.Closing  
                fClosing=true
                threadRecive.Join()
                oSocket.Shutdown(SocketShutdown.Receive)  
                oSocket.Close()  
        End Sub