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:
Come detto funziona tutto correttamente, ma vorrei catturare l'eccezione di non connessione, che spunta sull'EndConnect nella Sub OnConnect.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
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

Rispondi quotando