private ModbusException HandleIOException(IOException ioe) { ModbusException moe; if (ioe.InnerException is SocketException) { SocketException soe = ioe.InnerException as SocketException; //attenteEnCours = false; if (soe.ErrorCode == 10060) // Read timed out { moe = new ModbusTimeoutException("Expiration du timer d'attente de connexion ou de réponse.", soe); } else { moe = new ModbusException("Erreur de connexion ou de lecture du Socket.", soe); } } else { moe = new ModbusException("IOException innattendue.", ioe); } return(moe); }
private void recevoirReponse() { NetworkStream readNws = socket.GetStream(); int nbOctetsALire = 0; int nbOctetsLus = 0; int indexFinReponse = 0; try { nbOctetsLus = readNws.Read(tamponReponse, 0, 7); if (nbOctetsLus > 0) { nbOctetsALire = tamponReponse[4] * 256 + tamponReponse[5] - 1; while ((indexFinReponse < nbOctetsALire) || (nbOctetsLus == 0)) { nbOctetsLus = readNws.Read(tamponReponse, indexFinReponse + 7, nbOctetsALire - indexFinReponse); Console.WriteLine("{0} octets lus.", nbOctetsLus); indexFinReponse += nbOctetsLus; Thread.Sleep(50); // On laisse un peu de temps pour que la suite de la trame arrive } trameReponse = new byte[indexFinReponse + 7]; Buffer.BlockCopy(tamponReponse, 0, trameReponse, 0, indexFinReponse + 7); } } catch (IOException ioe) { ModbusException moe = HandleIOException(ioe); if (!(moe is ModbusTimeoutException)) { throw moe; } } finally { finReception = true; } }