Ver Mensaje Individual
  #1  
Antiguo 10-09-2016
jhonalone jhonalone is offline
Miembro
 
Registrado: sep 2007
Ubicación: Madrid
Posts: 547
Reputación: 17
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