Error 10053 con Netduino (SocketException ErrorCode=10053)


¿ Habéis  obtenido  de forma intermitente  el error 10053  en el proceso de depuración de vuestro código?

#### Exception System.Net.Sockets.SocketException – CLR_E_FAIL (1) ####
#### Message:
#### Microsoft.SPOT.Net.SocketNative::connect [IP: 0000] ####
#### System.Net.Sockets.Socket::Connect [IP: 001d] ####
#### Programa:Connect [IP: 0021] ####
#### Programa:funcion  [IP: 0042] ####
#### Programa::Main [IP: 01b1] ####
#### SocketException ErrorCode = 10053
#### SocketException ErrorCode = 10053

Excepción del tipo ‘System.Net.Sockets.SocketException’ en Microsoft.SPOT.Net.dll
#### SocketException ErrorCode = 10053
#### SocketException ErrorCode = 10053

Este post explora  consejos para solucionar este error molesto: 10053 SocketException ,es decir “Con la conexión establecida fue abortado por el software en el equipo host”

Puede pasar  al azar el error “SocketException 10053”, pero éste  no esta  realmente vinculado a ninguna situación específica, aunque de facto  pueda ocurrir con mayor facilidad cuando el servidor tarde más tiempo para responder a una solicitud (digamos unos 500 ms).

Puede de hecho ocurrir con un sólo 1 agente virtual  en la parte “BeginRead” , pero también puede suceder durante “BeginWrite” también  aunque  el servidor no este  cargado

Para rastrear el problema en la parte servidor podría  usarse   el  WireShark  con objeto de ver  que la solicitud sea enviada al servidor (en este caso  nunca obtuvo respuesta, saliendo SocketException en su lugar),pero  también seria buena  idea instalar  Wireshark   en el servidor remoto  para ver si  la solicitud llega al servidor

En  casos puede  llegar  inmediatamente después de conseguir  un paquete [RST, ACK] ),lo cual puede  significar  que el socket  había sido cerrado del lado del servidor pero es extraña esta excepción  pues no debería ser posible enviar datos en un socket cerrado ,(aunque lo sea a nivel de TCP, pero. NET debería lanza  un error) pues e acuerdo con RFC se deberia  obtener 0 bytes de BeginRead que es mucho más limpio que la obtención de una excepción. Por tanto si el socket se ha cerrado ,la máquina anfitrión  debería detectarlo pues se puede ver que equipo servidor ha enviado [FIN, ACK] antes en el mismo canal TCP.

Así que aquí están, finalmente, la cuestión es  ¿Cómo se puedo detectar que una conexión se ha cerrado en async E / S? (dado que Tuve ningún error al enviar los datos, sólo durante la lectura).
Aquí está el código fuente que obtenía dicho error:
public void StartReading (WebRequest petición) {
if (readBuffer == null)
readBuffer = new byte [ConfigManager.readBufferSize];

try {
request.ParentSocket.networkStream.BeginRead (readBuffer, 0, ConfigManager.readBufferSize, ReadAsyncCallback, petición);
} Catch (IOException ioe) {
Logger.LogError (nombre + “IOException en StartReading: BeginRead” + Request.Path);
ProcessIOException (request, OIE);
} Catch (Exception ex) {
throw new WAException (“StartReading:” + ex.Message, ex);
}
}

AsyncReadHandler public void (IAsyncResult result) {
try {

WebRequest request = (WebRequest) result.AsyncState;

BytesRead int = 0;

try {
BytesRead = request.ParentSocket.networkStream.EndRead (resultado);
} Catch (IOException ioe) {
Logger.LogError (“IOException Si bien la lectura (BytesRead =” + BytesRead + “) la respuesta a” + + Request.Path ioe.Message);
}

/ / Obtener 0 bytes mientras que la lectura mediante conexión se ha cerrado
if (BytesRead == 0) {
Logger.LogWarn (nombre + “> EndRead devuelve 0 bytes, petición =” + Request.Path + “, socket se ha cerrado, el envío de nuevo”);
RecreateSocketAndSend (petición);
volver;
}

} Catch (Exception ex) {
Logger.LogError (nombre + “> AsyncReadHandler: Excepción:” + ex.Message);
throw new WAException (nombre + “> AsyncReadHandler: Exception (“. ex.Message + + “) Path =” + ((WebRequest) result.AsyncState) Path, ex);
}
}

Y aquí la solución: cambiar  el  socket en modo de no bloqueo y tratar de leer 0 bytes. Si se devuelve  0 bytes y SocketError = éxito entonces sé que ha cerrado Socket lado del servidor. Si la conexión está todavía activa entones   SocketError = WouldBlock. Lo interesante es que en ambos casos los resultados son muy rápidos de obtener.

Otras solución podría ser  confiando en los tiempos de espera pero esto es bastante lento, incluso cuando la conexión está todavía. Quizás la solución propuesta  sea  la forma rápida de detectar la desconexión limpia, pues esto no puede funcionar si el paqute “FIN, ACK”  no se recibe por el cliente.

Aquí ID un pedazo de mi código, de ejemplo de como puede solucionarse :

bool previousMode = socket.Blocking;
socket.Client.Blocking = false;
SocketError se;
int BytesRead = socket.Receive (nuevo byte [0], 0, 0, SocketFlags.Peek, a sí mismo);
socket.Blocking = previousMode;

if ((SE == SocketError.Success) && (BytesRead == 0)) {
Logger.LogDebug (“isConnected = false”);
}

Fuente en ingles aqui

Netduino sobre Windows 8


Antes de hacer nada intentar actualizar    desde . NET SDK MF y Netduino SDK 4.1 con 4.2 con windows 8 no es una tarea fácil  porque  no hay soporte para Visual Studio 2012. En realidad no es exacto pues lo que hay que hacer es instalar . NET MF SDK versión 4.3,y sobre el  ya si se puede compilar  el SDK Netduino 4.2 sin problemas. (El. NET MF SDK soporta multi-dispositivo o para que pueda dirigirse a 4.2 dispositivos también).

RETIRE LO VIEJO (SI LO TIENE INSTALADO)

  1. Desinstalar el. NET Micro Framework SDK v4.1.
  2. Desinstalar el Netduino SDK v4.1.0.

CONSIGUE COSAS NUEVAS

  1. Instalar Visual Studio  Express 2012  para  Windows 8 , si todavía no lo ha  hecho aqui  puede encontrar el enlace.No olvide que esta versión de Visual Studio sólo esta disponible para Windows 8.

visual estudio2012

  1. Descargar e instalar la última versión . NET Micro Framework SDK 4.3 .
    (El 4.2 disponible en Netduino no soporta VS 2012)
  2. Descargar e instalar el SDK Netduino v4.2.1.0 .
    (32 bits o 64 bits según la versión de Windows)
  3. Descargar e instalar SAM-BA 2.12 para Windows .
    (Usted tendrá que registrarse y abrir una sesión, pero es gratis)
  4. Descargue y descomprima el nuevo firmware Netduino .

BORRE EL  NETDUINO

  1. Conecte su Netduino  a  un usb.
  2. Encontrar un cable de puente y conecte un extremo a la clavija de 3V3 y tocar la pequeña plaza de oro al lado del 0 pin GPIO con el otro extremo. Mantenga pulsado durante al menos 2 a 3 segundos.
    ADVERTENCIA: Este borra completamente su  Netduino y no se puede deshacer. Si usted hace esto, la única manera de que vuelva a funcionar es completar con éxito el resto de los pasos.
  3. Desconecte el Netduino, espere unos segundos y vuelva a conectarlo.

Ahora hay que reconocer a Windows como un nuevo dispositivo llamado GPS Detectar cámara. No hacemos más que ignorar esto y seguir adelante.

CARGAR LA IMAGEN TINYBOOTERDECOMPRESSOR

  1. Inicie la herramienta SAM-BA 2.12.
    (Debe estar en C: \ Archivos de programa (x86) \ Atmel \ sam-ba_2.12 \ sam-ba.exe)
  2. Seleccione la conexión.
    (Para mí era sólo una opción disponible)
  3. Seleccione su tablero.
    (Debe ser AT91SAM7X512-ek para el Netduino regular)
  4. Pulse en Conectar.
  5. Ejecute la ‘Boot from  Flash’ script.
  6. Ejecute el script ‘Enable flash access’  (Habilitar el acceso Flash).
  7. Asegúrese de que está en la ficha Flash y enviar el archivo ‘TinyBooterDecompressor.bin’ pulsando el boton “send File”.
    (este fichero esta  junto con todo  el firmware Netduino que se supone ha descargado anteriormente
  8. Seleccione “No” en la pregunta sobre regiones bloqueadas.
  9. Cuando termine, cierre la herramienta SAM-BA.
  10. Desconecte y vuelva a conectar el Netduino.

INSTALE EL NUEVO FIRMWARE

  1. Inicie la herramienta MFDeploy.
    (Debe estar en C:. \ Archivos de programa (x86) \ Microsoft NET Micro Framework \ v4.3 \ Tools \ MFDeploy.exe)
  2. Seleccione USB como el dispositivo y usted debe obtener un dispositivo Netduino_Netduino.
  3. Haga clic en el botón Ping para ver si responde.
    (Debe responder con TinyBooter)
  4. Examinar y seleccionar tanto el los archivos ER_FLASH bajo Archivo de Imagen yER_CONFIG y haga clic en Deploy (tarda un tiempo).
    (Vino con el firmware Netduino has descargado antes. Utilice la tecla Ctrl para seleccionar los dos archivos en el diálogo de archivo)
  5. Por último, desconecte y vuelva a conectar el Netduino.

Para confirmar la actualización, con la herramienta MFDeploy, vaya al menú de destino y seleccione Funciones de dispositivos. Usted debe conseguir un  montón de información, y entre los que algo que dice “Netduino (v4.2.0.1) por Secret Labs LLC”. Y eso debería ser todo .

Un vez actualizado si Netduinio   deberá  abrir el proyecto en Visual Studio Netduino y cambiar o el marco objetivo de 4,1 a 4,2 en la configuración del proyecto.

Fuente aqui

Libro gratuito “Netduino for beginners”


Tenemos a nuestra disposición en el portal ebookbrowse de forma gratuita un nuevo libro en ingles sobre como iniciarse con Netduino titulado “Netduino for beginners A gentle introduction using basic electronic projects ” por Georgi Hadzhigeorgiev.

Para mas comodidad puedes acceder directamente desde este enlace

netduino fro beginners

Para todos lo que le pueda interesar, reproducimos a continuación el indice de tan singular libro en el cual se hace un énfasis especial ,como se puede apreciar en el indice , en el    diseño eléctrico   de todos los circuitos electrónicos que deseemos conectar a nuestro Netduino:

  • Introduction to electronics principles and components 5
  • Electric potential, voltage and current 5
  • Conductors, insulators and semiconductors 5
  • Wires and wiring 6
  • Resistor 6
  • Table of standard resistor values 8
  • Inductance and coil 8
  • Capacitance and capacitor 8
  • Most commonly used capacitor values 10
  • The most common working voltages (DC), classified according to Capacitor type 10
  • P-N junction 11
  • Diode 11
  • LED 11
  • PUT 12
  • Transistor 12
  • Thyristor 12
  • Fundamental circuit laws and analysis 12
  • Ohm’s law 12
  • Kirchhoff’s laws 12
  • Methods for analysis 12
  • Digital logic 12
  • Basic functions 12
  • Diode logic (DL) 13
  • Resistor-Transistor logic (RTL) 13
  • Diode-Transistor logic (DTL) 13
  • Transistor-Transistor logic (TTL) 13
  • Emitter-Coupled logic (ECL) 13
  • Integrated circuit 13
  • IC is … 13
  • Microprocessors 13
  • Microprocessor is … 13
  • Microcontrollers 13 3
  • Microcontroller is … 13
  • Mechanical elements 13
  • Switch 13
  • Relay 13
  • Introduction to programming with C# and NET Microframework 14
  • Introduction to Netduino 15
  • Netduino can blink … a LED 16
  • Part I (electronic) 16
  • Part II (programming) 23
  • Boring LED flashing 23
  • Flash the LED until I press the button 26
  • Become ECO friendly 30
  • Better Multithreading 35
  • Solving the problem with LED becoming ON when Netduino boots 38
  • Relay approach 38
  • Using SCR thyristor and our first steps into digital logic gates 47
  • Using NAND gate (Negated AND) and current “sourcing” 51
  • Using AND gate and “sinking” 61
  • Using NOT gate 65
  • Using PNP transistor with straightened reverse program logic 65
  • Make few pins control more stuff 66
  • Charlieplexing 66
  • Using demultiplexer 66
  • Using shift register 66
  • Control the flash strength 66
  • From flash to pulse 66
  • Can we do all this even better or “Use the MOSFET, Netduino…” 66
  • Make Netduino “sense” the World 66
  • Netduino, can you hear me? 66
  • Make things move 66
  • I can see you, Netduino 66