Visualizzazione dei risultati da 1 a 2 su 2
  1. #1
    Utente di HTML.it L'avatar di SigAlexey
    Registrato dal
    May 2014
    residenza
    Treviso
    Messaggi
    186

    Ottenere m_RightEndPoint da Socket

    Buongiorno a tutti,

    sto lavorando sulla comunicazione con dei lettori di barcode che comunicano via Socket.

    Funzionano correttamente, riesco a connettermi e lavorarci.

    Il problema mi sorge quando uno di questi non è raggiungibile.

    Innanzitutto non sono riuscito ad impostare un Timeout per la connessione, però ho visto che non c'è la possibilità o comunque per farlo dovrei ricorrere a dei Timer.
    Dato che devo collegarmi a 8 dispositivi contemporaneamente, vorrei evitare di usare i timer, quindi per quello ho lasciato perdere.

    La connessione la faccio in questo modo:

    codice:
    Dim clSocket1 As Socket
    
    
    Private clntSockParams1 As clientSocketParameters
    
    clSocket1 = New Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)
    
    Dim ipAddress As Net.IPAddress = IPAddress.Parse(ip)
    Dim ipEndPoint As Net.IPEndPoint = New Net.IPEndPoint(ipAddress, port)
    
    clSocket1.BeginConnect(ipEndPoint, New AsyncCallback(AddressOf OnConnect), clSocket1)
    
    
    
    
    
    --------------------------------------------------------------------------------------------------------
    
    
    Dim byteData(1023) As Byte
    
    
    
    
        Private Sub OnConnect(ByVal ar As IAsyncResult)
    
    
    
    
             
            Dim client As Socket = ar.AsyncState
    
    
            client.EndConnect(ar)
            client.BeginReceive(byteData, 0, byteData.Length, SocketFlags.None,
                                          New AsyncCallback(AddressOf OnRecieve), client)
    
    
    
    
    
    
    
    
        End Sub
    Come detto funziona tutto correttamente, ma vorrei catturare l'eccezione di non connessione, che spunta sull'EndConnect nella Sub OnConnect.

    Ovviamente con un Try Catch la catturo, però vorrei indicare l'IP del dispositivo che non è stato raggiunto.

    Ho visto che in client.m_RightEndPoint ci sono le informazioni di cui ho bisogno, però non riesco ad utilizzarlo.
    Mi dice m_RightEndPoint' non è un membro di 'Socket'.

    Sapete per caso come ottenere quel dato?

    Grazie

  2. #2
    Utente di HTML.it
    Registrato dal
    Mar 2014
    residenza
    Vicenza
    Messaggi
    318
    io faccio il controllo del timeout di connessione senza problemi, eccoti un pezzo di codice che uso
    codice:
    Dim sck = New TcpClient
    sck.BeginConnect(IP_dove_collegarsi, Numero_della_porta, Nothing, Nothing)
    
    Dim start = Date.Now.Ticks
    Do Until Date.Now.Ticks - start > 2 * 10000000 ' 2 secondi di timeout
        If sck.Connected Then Exit For
        Application.DoEvents()
    Loop
    
    If Not sck.Connected Then
       sck.Close()
       MessageBox.Show("Mancata connessione al server", "Errore", MessageBoxButtons.OK, MessageBoxIcon.Error)
       Return False
    End If

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.