Odczyt danych z TBluetoothSocket

Odczyt danych z TBluetoothSocket
K1
  • Rejestracja:prawie 11 lat
  • Ostatnio:prawie 5 lat
  • Postów:93
0

Witam,
wykorzystuję aplikację (Delphi XE7)

Kopiuj
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

Kopiuj
ShowMessage(IntTOStr(length(FData)));

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

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

Czy spotkaliście się z takim problemem?

Kopiuj
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
KA
  • Rejestracja:prawie 21 lat
  • Ostatnio:około 2 miesiące
  • Postów:700
0
Kopiuj
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:

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

Kto nigdy nie zrobił var dupa niech pierwszy rzuci kamień.
K1
  • Rejestracja:prawie 11 lat
  • Ostatnio:prawie 5 lat
  • Postów:93
0

Problem w tym, że funkcja

Kopiuj
  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.

PW
  • Rejestracja:ponad 9 lat
  • Ostatnio:5 miesięcy
  • Postów:130
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

K1
  • Rejestracja:prawie 11 lat
  • Ostatnio:prawie 5 lat
  • Postów:93
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)

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.