Ir al contenido



Foto

Ayuda con Socket Error #10054 Connection restet by peer


  • Por favor identifícate para responder
4 respuestas en este tema

#1 Wilson

Wilson

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.137 mensajes

Escrito 10 diciembre 2013 - 12:58

Hola compañeros, estoy teniendo problemas con una aplicación DataSnap (Dephi XE3), en el lado servidor, la propiedad TimeOut del DSHTTPService está en 1200000 (default), el cliente se conecta vía Http, el problema es que ante pequeños lapsos de inactividad (a veces por debajo del TimeOut), al intentar ejecutar algún método, me  saca el error  "Socket Error #10054 Connection restet by peer", lo aburridor es que antes de sacar el error la aplicación intenta colgarse, por ejemplo en windows 8 alcanza a sacar el aviso de que la aplicación dejó de funcionar, después de cerrar el aviso de windows aparece el error que menciono, cierro el diálogo del error, intento la reconexión y todo vuelve a la normalidad.
Quisiera encontrar una forma transparente de manejar este error (que intente la reconexión de forma transparente).
Muchas gracias de antemano.

Un saludo.
  • 0

#2 axesys

axesys

    Advanced Member

  • Moderadores
  • PipPipPip
  • 640 mensajes
  • LocationLos Mochis

Escrito 13 diciembre 2013 - 01:21

Pues yo lo he estado manejando así aunque no me salen las excepciones

Con un componente ApplicationEvents uso este codigo en mi forma principal



delphi
  1. procedure TfrmPrincipal.ApplicationEventsException(Sender: TObject;
  2.   E: Exception);
  3. begin
  4.   if AnsiContainsText(E.Message, '10054') or AnsiContainsText(E.Message, 'Read error') then
  5.   begin
  6.     try
  7.       StatusBar.Panels[0].Text:= 'Se perdio la conexión con el servidor. Volviendo a conectar.';
  8.       CerrarTodo;
  9.       dmDatos.Reconectar;
  10.       StatusBar.Panels[0].Text:= 'Se recupero la conexión con el servidor.';
  11.     except
  12.       Application.MessageBox(PChar('Imposible conectar de nuevo con el servidor debido a un fallo de comunicación con la red' + chr(13) + E.Message),'Error',MB_OK + MB_ICONERROR);
  13.     end;
  14.   end;
  15. end;
  16.  
  17. procedure TfrmPrincipal.CerrarTodo;
  18. var
  19.   i: Integer;
  20. begin
  21.   for i := Pred(PageControl.PageCount) downto 1 do
  22.     PageControl.Pages[i].Free
  23. end;



Y este código en mi modulo de datos



delphi
  1. procedure TdmDatos.Reconectar;
  2. begin
  3.   cntConexion.Close;
  4.   cntConexion.Open
  5. end;


  • 0

#3 Wilson

Wilson

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.137 mensajes

Escrito 13 diciembre 2013 - 02:42

Hola axesys, ante todo me da muchísimo gusto volver a leerte, muchas gracias por la ayuda.

Un fuerte abrazo.
  • 0

#4 genriquez

genriquez

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 520 mensajes
  • LocationCali, Colombia

Escrito 13 diciembre 2013 - 05:08

Hola,  creo que el problema no es de timeout,  a mi me ocurre cuando en el lado del servidor ocurre un error,  usualmente porque utiliza un objeto sin crearlo nuevamente o algún otro tipo de violación de memoria.

podrías revisar eso, al menos disminuye posibilidades.
  • 0

#5 Wilson

Wilson

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.137 mensajes

Escrito 13 diciembre 2013 - 09:17

Gracias Gustavo  por tu respuesta, de hecho tengo descartado el TimeOut como el causante, y con respecto  a algún tipo de violación de memoria en el servidor a causa de creación  o destrucción de objetos también lo descarto de tajo ya que para salir de dudas he realizado pruebas con cosas muy sencillas como devolver una cadena de texto, le apunto a un problema de comunicaciones.

De nuevo gracias por tu interés.

Un abrazo.
  • 0