none
斷線一段時間後 Socket 無法連線成功 & 安全存取變數 RRS feed

  • 問題

  • 各位先進們好

       小弟有兩個問題想請各位前輩指導

       01. 透過 Socket 去連線時第一次可以順利快速的連上線 並且開始交握通訊

             如果設備網路線故意拔掉 等 1秒鐘插上去 透過下列方式還是可以很快的連上

             不過如果把網路線故意拔掉等 10秒鐘以上 再插上去  下列方式依樣可以 建立 TcpClient 

             但是 總是 不會 Connected = True 就是與對方沒有連線上  , 此時無論清掉多少次重新去連線都沒有用

             我有嘗試過  中間延遲 十幾秒 / 或是 加上 Doevents 也都沒有效果

             我有什麼方式可以在網路線插上去時可以順利跟它連線呢?

             已經確定它最大可以讓 5個人連  且 我重新連線時 另一隻程式是可以順利的直接在網路插上去時連上它的

             只有我不行@@

       Private Shared connectDone As New ManualResetEvent(False)   

       Private Shared Sub ConnectCallback(ByVal ar As IAsyncResult)        Try

                Dim client As Socket = CType(ar.AsyncState, Socket)
                client.EndConnect(ar)
                connectDone.Set()
            Catch ex As Exception
            End Try
        End Sub 'ConnectCallback  

        Private Sub LinkConnect()

                    Dim sts As Object
                    masterTcpClient.Client.Close()
                    masterTcpClient.Close()
                    masterTcpClient = Nothing
                    masterTcpClient = New TcpClient()
                    masterTcpClient.BeginConnect(xIP,
                                      Convert.ToInt16(xPort), New AsyncCallback(AddressOf ConnectCallback), sts)
                    connectDone.WaitOne(1000)

        end sub 

       02.  請問 當我有兩個 Threading 在裡面做 迴圈  

              當我有一個共同的 List(Class) 變數 需要去存取它 在兩個迴圈個別存取並且透過 Lock 去寫入相關資料

               請問 我應該怎麼做 才可以讓這兩個迴圈 除了在 Lock 狀態下  可以更安全的存取這個 變數呢

    以上 要勞煩各位前輩了 感恩

    2020年8月19日 下午 12:44

解答

  • 你 Server 端有定時做連線檢查測試嗎?

    有可能是 Server 端占用資源無法連線。

    你的 TcpClient 可以先用 Web Server 做連線測試,Web Server 對於 Socket 管理滿好的,你可以試試拔網路線再插回,沒問題就是 Server 端沒寫好。


    不精確的問法,就會得到隨便猜的答案;自己都不肯花時間好好描述問題,又何必期望網友會認真回答?

    • 已標示為解答 Luoco 2020年8月20日 下午 11:42
    2020年8月19日 下午 03:31