none
[VS2005] TCP 連線的問題. RRS feed

  • 一般討論

  • 我有寫一段程式, 使用 TCP 連線, 一開始都連線很正常, 但是過一段時間後就無法連線了, 一定要將軟體重新啟動才可以連線, 請問是那邊有問題呢??

    '連線到 TcpServer
        Private Function ConnectTcpServer() As Boolean
            If My.Computer.Network.IsAvailable = False Then Return False
    
            Try
                _TcpClient_ar = _TcpClient.BeginConnect(Net.IPAddress.Parse(_IP), _Port, Nothing, Nothing)
                Dim ddd As DateTime = Date.Now
    
                Do
                    If _TcpClient_ar.IsCompleted = True Then Exit Do
    
                    If Date.Now > ddd.AddSeconds(10) Then   'timeout 10s
                        Return False
                    End If
    
                    System.Threading.Thread.Sleep(100)
                Loop
    
            Catch ex As Exception
                Return False
            End Try
    
            Return True
        End Function
    當網路連線失敗時, 程式會再一次呼叫這個副程式, 即可再次連上 TCP Server,  但是幾次之後, 則無法連線至 TCP Server 了, 一定要將軟體重開才有辨法重新連線..  請問一下, 是那邊有問題呢?
    2009年11月25日 上午 07:48

所有回覆

  • "當網路連線失敗時, 程式會再一次呼叫這個副程式"


     你在哪裡 判斷  網路連線失敗      ? 




    Cmf.Net (C) 2009
    2009年11月25日 上午 08:20
  • 我是用下面這一段程式來判斷是否連線失敗...
    Try
                _TcpClient.GetStream.Write(btebuf, 0, btebuf.Length)
            Catch ex As Exception
                '連線失敗
                _TcpClientConnect = ENUM_ConnectType._OFF
                _TcpClient.EndConnect(_TcpClient_ar)
                _TcpClient.Client.Disconnect(True)
            End Try
    2009年11月25日 上午 08:27
  • 你是斷線重連還是持續檢查連線狀態?

    持續檢查連線狀態可參考既有討論:
    http://social.msdn.microsoft.com/Search/zh-TW/?Refinement=112&query=10035

    你無法連線時,請先用 telnet 測目標主機,或許是主機的 socket 寫的有問題或是設定拒絕多個連線,先確認連線狀態,網路可能發生的問題很多,你又自己再包一次 TcpClient ,很難只從程式碼判斷你的問題。
    論壇是網友平等互助 保證解答請至 微軟技術支援服務
    提問時,錯誤情境描述與錯誤訊息很重要,情境描述包含你做了什麼,預期的結果與實際發生的結果。一個最爛的問法範例:「我的電腦電腦怎麼不能開機?」誰知道你家是不是沒電還是你根本找不到電源鈕。
    2009年11月25日 上午 09:58
  • 請問
                    If Date.Now > ddd.AddSeconds(10) Then   'timeout 10s
                        Return False
                    End If
    這段的作用是什麼 ? 因為一旦return false應該就會跳離Function
    學而不思則罔, 思而不學則殆.
    如果你一直都看不懂、不想學習看懂、抗拒看懂MSDN Library的話,那你最好放棄想要寫好程式這件事
    如果你自私地不肯回饋與分享,那別人為何要花時間回答你的問題?
    2009年11月25日 下午 12:32
    版主
  •  Dim netStream As NetworkStream = tcpClient.GetStream()
          If netStream.CanWrite Then
             Dim sendBytes As [Byte]() = Encoding.UTF8.GetBytes("Is anybody there?")
             netStream.Write(sendBytes, 0, sendBytes.Length)
          Else
             Console.WriteLine("You cannot write data to this stream.")
             tcpClient.Close()
             ' Closing the tcpClient instance does not close the network stream.
             netStream.Close()
             Return
          End If
    
    
    
    
    

    Cmf.Net (C) 2009
    2009年11月26日 上午 03:39
  • 這是一個判斷連線成不成功的副程式...  一但超過我設定的秒數時, 我就判定此連線不成功..
    2009年11月26日 上午 03:45