Odczyt danych z TBluetoothSocket

Odpowiedz Nowy wątek
2019-03-11 19:59
0

Witam,
wykorzystuję aplikację (Delphi XE7)

C:\Users\Public\Documents\Embarcadero\Studio\15.0\Samples\Object Pascal\Mobile Samples\Device Sensors and Services\Bluetooth\Classic Bluetooth Basic app

do przesyłania tesktu między połączonymi przez bluetooth urządzenami (android, Windows)
Poniższy kod odbiera dane przesyłane z innego urządzenia.
Wiem jak długi teskt przesyłam

 ShowMessage(IntTOStr(length(FData)));

ale przy próbie odczytu danych, zwracany jest pusty ciąg znaków.

Form1.DisplayR.Lines.Add(TEncoding.UTF8.GetString(FData));

Czy spotkaliście się z takim problemem?

procedure TServerConnectionTH.execute;
var
  ASocket: TBluetoothSocket;
  Msg: string;
begin
  while not Terminated do
    try
      ASocket := nil;
      while not Terminated and (ASocket = nil) do
        ASocket := FServerSocket.Accept(100);
      if(ASocket <> nil) then
      begin
        FSocket := ASocket;
        while not Terminated do
        begin
          FData := ASocket.ReadData;
            ShowMessage(IntTOStr(length(FData)));
          if length(FData) > 0 then
            Synchronize(procedure
              begin
                Form1.DisplayR.Lines.Add(TEncoding.UTF8.GetString(FData));
             Form1.DisplayR.GoToTextEnd;
              end);
          sleep(100);
        end;
      end;
    except
      on E : Exception do
      begin
        Msg := E.Message;
        Synchronize(procedure
          begin
            Form1.DisplayR.Lines.Add('Server Socket closed: ' + Msg);
            Form1.DisplayR.GoToTextEnd;
          end);
      end;
    end;
end;
edytowany 2x, ostatnio: Kazik1, 2019-03-11 20:00

Pozostało 580 znaków

2019-03-14 15:24
0
TEncoding.GetString decodes the Bytes byte array into a string. 

Nie wiem (szczerze to strzelam bo się nie znam;) ) - może trzeba zrobić jakieś cudo w stylu:

Form1.DisplayR.Lines.Add(TEncoding.UTF8.GetString(FData[0]));

Kto nigdy nie zrobił var dupa niech pierwszy rzuci kamień.

Pozostało 580 znaków

2019-03-16 15:30
0

Problem w tym, że funkcja

  TBluetoothSocket = class
  protected
    function GetConnected: Boolean; virtual; abstract;
    procedure DoClose; virtual; abstract;
    procedure DoConnect; virtual; abstract;
    function DoReadData: TBytes; virtual; abstract;
    procedure DoSendData(const AData: TBytes); virtual; abstract;
  public
    procedure Close;
    procedure Connect;
    function ReadData: TBytes;
    procedure SendData(const AData: TBytes);

    property Connected: Boolean read GetConnected;
  end;

function TBluetoothSocket.ReadData: TBytes;
begin
  Result := DoReadData;
end;

screenshot-20190316152615.png

Zwraca tablice z samymi wartościami 0.
Nie mogę znaleźć alternatywy dla przesylania danych z telefonu do PC przez bluetooth.
Porty szeregowe odpadają a chciałbym to zrobić bez kupowania komponentów (w końću kupiłem Delphi za ponad 10k któa chwali się, że potrafi)
NIestety AppTetthering też nie działa dla bluetooth.

Zabieram się za użycie kodu Javy w Delphi.
Mam nadzieję, że to pomoże.

Pozostało 580 znaków

2019-03-16 16:48
0

Przejrzyj przykłady jakie są dołączone do środowiska...\Embarcadero\Studio\18.0\Samples\Object Pascal\Multi-Device Samples\Device Sensors and Services\Bluetooth

Pozostało 580 znaków

2019-03-16 17:11
0

C:\Users\Public\Documents\Embarcadero\Studio\15.0\Samples\Object Pascal\Mobile Samples\Device Sensors and Services\Bluetooth\BlueChat

Ta sama metoda i ten sam problem.
TBluetoothSocket.ReadData zwraca 0,0,0,0 (ilość zer w zależności od długości tesktu)

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0