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