Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Desarrollo en Delphi para Android
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos


Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 10-09-2016
jhonalone jhonalone is offline
Miembro
 
Registrado: Sep 2007
Ubicación: Madrid
Posts: 405
Poder: 11
jhonalone Va por buen camino
Conectando Impresora por Bluetooth = Error Socket

Hola, amigos.

Intento imprimir recibos desde un smartfone a una impresora inalámbrica por BlueTooth.
Estuve indagando en el foro y en internet varios días y no encontré una solución satisfactoria.

Uso Delphi10 Seattle.

Encontré un ejemplo en la dirección C:\RadStudio10\17.0\Samples\Object Pascal\Multi-Device Samples\Device Sensors and Services\Bluetooth\Classic Bluetooth Basic app.

Comencé a hacer pruebas con con este proyecto de ejemplo de Embarcadero y he llegado a la conclusión de que tiene un problema al crear el socket para la conexión.

El error que da la aplicación compilada y SIN MODIFICACIÓN DE CÓDIGO es el siguiente:

java.io.IOException: read failed, socket might closed or time out, read ret:-1

He intentado localizar el error con el siguiente código:

Código Delphi [-]
procedure TForm1.SendData;
var
  ToSend: TBytes;
  LDevice: TBluetoothDevice;
begin
  if (FSocket = nil) or (ItemIndex <> ComboboxPaired.ItemIndex) then
  begin
  ShowMessage('Socket = Nil o bien el índice ha cambiado'); // Linea añadida por mi
    if ComboboxPaired.ItemIndex > -1 then
    begin
      LDevice := FPairedDevices[ComboboxPaired.ItemIndex] as TBluetoothDevice;
      DisplayR.Lines.Add(GetServiceName(ServiceGUI));
      DisplayR.GoToTextEnd;
      FSocket := LDevice.CreateClientSocket(StringToGUID(ServiceGUI), False);
      if FSocket <> nil then
      begin
        ShowMessage('Socket no es Nil'); // Linea añadida por mi
        ItemIndex := ComboboxPaired.ItemIndex;
        FSocket.Connect;  // EL ERROR ESTA AQUÍ AL CONECTAR (¡?)
        if not (FSocket.Connected) then ShowMessage('Socket NO CONECTADO'); // Linea añadida por mi
        if (FSocket.Connected) then ShowMessage('Socket HE CONECTADO'); // Linea añadida por mi
        ToSend := TEncoding.UTF8.GetBytes(Edit1.Text);
        FSocket.SendData(ToSend);
        DisplayR.Lines.Add('Text Sent');
        DisplayR.GoToTextEnd;
      end
      else
        ShowMessage('Out of time -15s-');
    end
    else
      ShowMessage('No paired device selected');
  end
  else
  begin
    ShowMessage('Socket <> Nil o bien el índice NO ha cambiado'); // Linea añadida por mi
    ToSend := TEncoding.UTF8.GetBytes(Edit1.Text);
    FSocket.SendData(ToSend);
    DisplayR.Lines.Add('Text Sent');
    DisplayR.GoToTextEnd;
  end;
end;

El código es el original de Embarcadero, yo solamente he añadido los mensajes para descubrir el punto del error.

El resultado ha sido:
Dos mensajes.
El primero: "Socket = Nil o bien el índice ha cambiado".
El segundo: "Socket no es Nil".
El Tercer mensaje, sería si ha conectado o no.
PUES EL ERROR SALTA ANTES DE EMITIR EL tercer mensaje: éste no aparece.

Lo más "gracioso" es que detecta la impresora y al pulsar el "ComboBoDevices" aparece en la lista detectada y lo puedes seleccionar. Y LA SELECCIONA.

Pero cuando cambias al tab "SERVICE DEMO" y pulsas el boton "Send Texto-> Thermal Printer"
entonces aparecen los dos mensajes mencionados y a continuación el mensaje de error en el Memo1.

No se si el problema está en que no crea un GUID adecuado para la impresora, o si le asignas una impresora bluetooth el socket NO SE CREA.

NO LE ENVIO UN CÓDIGO DE ESCAPE A LA IMPRESORA, PORQUE LA APP, HE COMPROBADO QUE NO LLEGA HASTA AHÍ.

Espero una respuesta al problema, y si no la recibo, tendré que cancelar el proyecto. Pues todo él se basa en la posibilidad de imprimir BlueTooth.

Un gran saludo para todos y especialmente a los que han conseguido leer hasta aquí.

Mis disculpas por el ROLLAZO. Pero como dice Neftalí "Más tiempo dedicado a la pregunta=Mejores respuestas."

Gracias por anticipado a los que puedan ayudarme.

Saludos para todos. Gracias por mantener este foro de consulta durante tantos años.
Responder Con Cita
  #2  
Antiguo 15-09-2016
wramirez wramirez is offline
Registrado
 
Registrado: Jul 2010
Posts: 4
Poder: 0
wramirez Va por buen camino
Impresora Bluetooth

Saludos a Todos
Ese Mismo problema me pasa a mi he intentado varios código pero siempre me el mismo error en el socket , por favor si alguien sabe de esto que nos ayude a resolverlo Gracias..
Responder Con Cita
  #3  
Antiguo 15-09-2016
jhonalone jhonalone is offline
Miembro
 
Registrado: Sep 2007
Ubicación: Madrid
Posts: 405
Poder: 11
jhonalone Va por buen camino
Hola wramirez.

Tengo que darte una buena noticia. ESTOY EN EL BUEN CAMINO.

Si te esperas unos 15 días para que confirme mis expectativas, espero tenerlo resuelto. Ya te subiré el código cuando compruebe que funciona 100x100.

Un saludo.
Responder Con Cita
  #4  
Antiguo 16-09-2016
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: Jul 2004
Ubicación: Barcelona - España
Posts: 15.576
Poder: 10
Neftali [Germán.Estévez] Tiene un aura espectacularNeftali [Germán.Estévez] Tiene un aura espectacular
Cita:
Empezado por jhonalone Ver Mensaje
...Pero como dice Neftalí "Más tiempo dedicado a la pregunta=Mejores respuestas."

Pensé que nadie leía nunca ese mensaje...

Lo primero que se me ocurre es si tienes bien configurados todos los permisos. Sería lo primero por lo que se denegaría la conexión.

Por otro lado aquí tenéis alguien que está intentando hacer algo similar. Revisad el código a ver si os sirve de ayuda:
http://stackoverflow.com/questions/2...rtable-printer

Echadle un vistazo también a este componente:
http://hyperbasesuite.blogspot.com.e...-conexion.html

A ver si vamos aclarando algo...
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #5  
Antiguo 16-09-2016
jhonalone jhonalone is offline
Miembro
 
Registrado: Sep 2007
Ubicación: Madrid
Posts: 405
Poder: 11
jhonalone Va por buen camino
Gracias, Neftalí.
Precisamente he estado trabajando sobre el link de StackOverflow.

He conseguido conectar con la impresora y enviarle texto. Lástima que haya tenido que devolver la impresora, pues parecía muy completa. Sólo un problema la pongo: no escribe la "Ñ,ñ" ni las vocales acentuadas. He probado todos los juegos de caracteres que venían en el "Programmer Manual" y todos los que venían en el test de la impresora. Una pena de servicio técnico y, además de venir los manuales sólo en inglés y chino, no te permitían imprimir los ".pdf". La marca, por si le interesa a alguien, es "Excelvan E300".

Basado en este link he conseguido enviar texto.

Dejo aquí el ".zip" con el programa de prueba por si interesa a alguien. Lo digo por ti wramirez

Evidentemente, los códigos de Escape habrá que modificarlos de acuerdo con el manual de cada impresora. (aunque la mayoría suelen ser iguales tanto los que siguen el sistema Epson como los de IBM, que suelen ser los más comunes)

Espero que le sirva a alguien.
Saludos a todos.
Archivos Adjuntos
Tipo de Archivo: zip Imprime.zip (5,8 KB, 54 visitas)
Responder Con Cita
  #6  
Antiguo 16-09-2016
jhonalone jhonalone is offline
Miembro
 
Registrado: Sep 2007
Ubicación: Madrid
Posts: 405
Poder: 11
jhonalone Va por buen camino
Bueno.

Se me olvidaba deciros, que al compilar da un mensaje de error que no sé por qué, pero que no afecta al funcionamiento de la apk. Dice "Error: Field Form1.Impresora does not have a corresponding component. Remove the declaration?"
No hace falta que os diga que debéis responder "No"

Además, podéis quitar el componente "BlueToothLE1", ya que lo puse para hacer unas pruebas, pero funciona exactamente igual sin él.

Saludos de nuevo.
Responder Con Cita
  #7  
Antiguo 16-09-2016
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: Jul 2004
Ubicación: Barcelona - España
Posts: 15.576
Poder: 10
Neftali [Germán.Estévez] Tiene un aura espectacularNeftali [Germán.Estévez] Tiene un aura espectacular
Gracias por la explicación y el ejemplo.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #8  
Antiguo 17-09-2016
Avatar de AgustinOrtu
[AgustinOrtu] AgustinOrtu is offline
Miembro Premium
 
Registrado: Aug 2013
Ubicación: Argentina
Posts: 1.858
Poder: 9
AgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en bruto
Cita:
Empezado por jhonalone Ver Mensaje
Bueno.

Se me olvidaba deciros, que al compilar da un mensaje de error que no sé por qué, pero que no afecta al funcionamiento de la apk. Dice "Error: Field Form1.Impresora does not have a corresponding component. Remove the declaration?"
No hace falta que os diga que debéis responder "No"

Además, podéis quitar el componente "BlueToothLE1", ya que lo puse para hacer unas pruebas, pero funciona exactamente igual sin él.

Saludos de nuevo.
No debería suceder lo que describes. Eso significa que hay algún problema de sincronización entre el .pas y el .dfm (no he descargado el proyecto)

Por lo general pasa si se editan a mano algunos archivos y se eliminan referencias; también puede pasar el algún copia-pega o deshacer que falla. Lo que podés hacer para solucionarlo es, seleccionar el componente impresora, hacerle un cortar (control + x) y pegarlo: al insertar el componente nuevamente, Delphi va a volver a generar las referencias necesarias.

Te lo digo porque es como que el form no conoce al componente, entonces si tenés configurada algunas propiedades y/o eventos en diseño te podés llegar a encontrar con problemas raros en tiempo de ejecución

Si lo que propongo arriba no lo soluciona yo reconstruiría el proyecto entero, antes de que se haga más grande
Responder Con Cita
  #9  
Antiguo 17-09-2016
jhonalone jhonalone is offline
Miembro
 
Registrado: Sep 2007
Ubicación: Madrid
Posts: 405
Poder: 11
jhonalone Va por buen camino
Gracias, Agustín, por tu interés.

No me había preocupado por el tema, porque no me daba error en tiempo de ejecución. Y porque este proyecto era sólo para conectar con la impresora por Bluetooth.
Pero ahora he intentado resolverlo. No ha funcionado corta/pega.
Pero he visto que ¡SOY UN ANIMAL...! Tenía declarada la variable "Impresora : TBluetoothDevice;" ¡por encima de la directiva private!.

Bueno, a lo que vamos.
¡He conseguido escribir en la impresora las Ñs y los acentos.!.
Resulta que los códigos de Escape para manipular la impresora deben ir codificados en ASCII, el juego de caracteres debe ser WPC1252(Latin-1) y el texto enviado a la impresora debe ir codificado en Unicode. Al menos en mi impresora...

Dejo las modificaciones en el código del proyecto por si interesan a alguien.
Código Delphi [-]
if FSocket.Connected
     then Begin
          Texto := #27 + #64;
          BytesEnviados := TEncoding.ASCII.GetBytes(Texto);
          FSocket.SendData(BytesEnviados);
          Texto := #27 + 't' + #16; // Selecciona juego de caracteres WPC1252(Latin-1)
          BytesEnviados := TEncoding.ASCII.GetBytes(Texto);
          FSocket.SendData(BytesEnviados);
          Texto := #27 + '!' +#0; //  Tamaño normal de la fuente
          BytesEnviados := TEncoding.ASCII.GetBytes(Texto);
          FSocket.SendData(BytesEnviados);
          Texto := #27 + 'Hola mundo con ñ y Ñ,  hola España CAÑÍ' + #10; // Envia el escrito y alimenta una línea
          // Texto := #27 +Edit1.Text + #10; // Envia el escrito y alimenta una línea
          BytesEnviados := TEncoding.Unicode.GetBytes(Texto);
          FSocket.SendData(BytesEnviados);

          Sleep(200);
          End;

Saludos a todos.
Responder Con Cita
  #10  
Antiguo 17-09-2016
wramirez wramirez is offline
Registrado
 
Registrado: Jul 2010
Posts: 4
Poder: 0
wramirez Va por buen camino
Gracias Hermano.. Quiera Dios y Pueda Resolver eso, porque llevo 1 mes en eso buscando esa solución y nadie ha podido resolvoerlo
Responder Con Cita
  #11  
Antiguo 18-09-2016
jhonalone jhonalone is offline
Miembro
 
Registrado: Sep 2007
Ubicación: Madrid
Posts: 405
Poder: 11
jhonalone Va por buen camino
Vale,wramirez.
Pruébalo y me cuentas. Si tienes alguna duda, pregunta en el foro mejor que en privado.
Como habrás leído, a mi me funciona perfectamente.
Saludos.
Responder Con Cita
  #12  
Antiguo 22-09-2016
Rocio90 Rocio90 is offline
Miembro
 
Registrado: Sep 2016
Posts: 12
Poder: 0
Rocio90 Va por buen camino
Muy bueno muchas gracias
Responder Con Cita
  #13  
Antiguo 22-09-2016
wramirez wramirez is offline
Registrado
 
Registrado: Jul 2010
Posts: 4
Poder: 0
wramirez Va por buen camino
Saludos a Todos:
Resulta que el código que envió jhonalone , solo me funciona en table o windows no tengo idea porque cuando instalo el apk en un samsum s5 sigue dándome el error de socket java.ioexeption, pero desde windows o una table con androide imprimo bien aunque después de la primera impresión da un error socket java.ioexeption y luego vuelvo y le doy e imprime de nuevo. que puedo hacer para que me funciones en un mobil.. lo he probado en varios mobil con diferentes versiones pero no he tenido resultado.
Gracias..
Responder Con Cita
  #14  
Antiguo 23-09-2016
jhonalone jhonalone is offline
Miembro
 
Registrado: Sep 2007
Ubicación: Madrid
Posts: 405
Poder: 11
jhonalone Va por buen camino
Hola a todos.
wramirez dijo:
Cita:
Resulta que el código que envió jhonalone , solo me funciona en table o windows no tengo idea porque cuando instalo el apk en un samsum s5 sigue dándome el error de socket java.ioexeption, pero desde windows o una table con androide imprimo bien aunque después de la primera impresión da un error socket java.ioexeption y luego vuelvo y le doy e imprime de nuevo. que puedo hacer para que me funciones en un mobil.. lo he probado en varios mobil con diferentes versiones pero no he tenido resultado.
Dos cuestiones a tener en cuenta:

1.- Respecto al error de Socket.
Lo más probable es que tengas pareados en el teléfono más de un dispositivo además de la impresora.

2.- Respecto a la escritura en sí:
Cada impresora es un mundo y cada dispositivo otro. Con el mismo juego de caracteres
Código Delphi [-]
Texto := #27 + 't' + #16; // Selecciona juego de caracteres WPC1252(Latin-1)
y con el mismo
Código Delphi [-]
TEncoding.Unicode/ASCII/UTF8.GetBytes(Texto)
¡¡¡NO TE VA A ESCRIBIR IGUAL EN TODAS LAS IMPRESORAS.!!! Casi seguro.
Tendrás que adaptar el juego de caracteres y el TEncoding para cada impresora.

Saludos.

Última edición por jhonalone fecha: 23-09-2016 a las 15:15:15.
Responder Con Cita
  #15  
Antiguo 23-09-2016
jhonalone jhonalone is offline
Miembro
 
Registrado: Sep 2007
Ubicación: Madrid
Posts: 405
Poder: 11
jhonalone Va por buen camino
Hola a todos.

¡Ah! wramirez, se me olvidó decirte que te dará este error si tienes la impresora conectada por Bluetooth a otro dispositivo.

No tengo la suerte de tener un móvil Samsung S5 así que lo más que he podido probar es en S4 y a mí me ha funcionado.

Saludos.
Responder Con Cita
  #16  
Antiguo Hace 1 Semana
eliezerfox eliezerfox is offline
Registrado
 
Registrado: May 2018
Posts: 1
Poder: 0
eliezerfox Va por buen camino
Resolvido java.io.IOException: read failed, socket might closed or time out

Olá a todos.
não vou fica aqui falando sobre o mesmo assunto. " java.io.IOException: read failed, socket might closed or time out, read ret:-1 "
só estou postando o que consegui pra retribuir com todos do fórum pois foi dessa forma em fórum como esse que chequei aqui como desenvolvedor em delphi.

em anexo exemplo em delphi berlin para windows,android.
foi testado em três impressoras top (china) de R$199.00 de marca diferentes.
Archivos Adjuntos
Tipo de Archivo: rar impressora-bluetooth.rar (95,4 KB, 4 visitas)
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Error en Aplicacion para Conexion Bluetooth kurono Desarrollo en Delphi para Android 1 12-05-2014 04:38:10
error de socket carloscampoy Internet 20 10-12-2007 02:08:00
Error (10060) conectando a MySql MaMu MySQL 2 26-08-2007 14:03:52
NMFTP :Error 10038 Socket operation on non socket judit Internet 2 25-05-2006 09:06:33
Error conectando una base de datos Access hunabku Conexión con bases de datos 0 23-05-2005 16:05:08


La franja horaria es GMT +2. Ahora son las 16:32:10.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi