Bluetooth Server mit Windows Sockets

Alle Fragen zur Netzwerkkommunikation
Antworten
Marikuru
Beiträge: 1
Registriert: So 30. Mär 2014, 20:26

Bluetooth Server mit Windows Sockets

Beitrag von Marikuru »

Hallo.
Seit einiger Zeit versuche ich eine Bluetooth Verbindung zwischen Android und Windows herzustellen.
für die Android Programmierung nutze ich Eclipse, und für Windows Lazarus.

Ich habe ein TestProgramm geschrieben, um zu schauen, wie was funktioniert, nur komme ich nicht weiter.

Hier der Code


Code: Alles auswählen

 
unit Unit1;
 
{$mode objfpc}{$H+}
 
interface
 
uses
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls,
  ExtCtrls, WinSock2, JwaBthSdpDef, JwaBluetoothAPIs, JwaWs2Bth, Windows,
  JWAWinUser;
 
type
 
  TForm1 = class(TForm)
  Button1: TButton;
  Memo1: TMemo;
  procedure Button1Click(Sender: TObject);
 
end;
 
var
 Form1: TForm1;
 iResult,i:Integer;
 Data:WSAData;
 s :Tsocket;
 s2 :Tsocket;
 protocolInfo:TWSAProtocol_Info ;
 address:SOCKADDR_BTH;
 addressT:TSockAddr;
 addressT2:SOCKADDR_BTH;
 service :TWSAQuerySetA;
 serviceID:GUID =({04c6093b00001000800000805f9b34fb}) ;
 csAddr:CSADDR_INFO;
 
implementation
 
{$R *.lfm}
 
{ TForm1 }
 
procedure TForm1.Button1Click(Sender: TObject);
  begin
    memo1.Clear;
 
    iResult:= WSAStartup( MakeWord(2,2), Data);
        if (iResult=0) then memo1.Lines.Add('WSAStartup OK') else memo1.Lines.Add('WSAStartup !OK');
 
    s:=socket(AF_BTH, SOCK_STREAM, BTHPROTO_RFCOMM);
        if (s= INVALID_SOCKET) then memo1.Lines.Add('socket !OK') else memo1.Lines.Add('socket OK');
 
    i:=sizeof(protocolInfo);
    iResult:=getsockopt(s,SOL_SOCKET, SO_PROTOCOL_INFO,Pchar(@protocolInfo),i);
        if (iResult=0) then memo1.lines.add('getsockopt OK') else memo1.lines.add('getsockopt !OK');
 
    address.addressFamily:=AF_BTH;
    //address.btAddr:=0;
    //address.serviceClassId:=GUID_NULL;
    address.port:=BT_PORT_ANY;
 
    Move(address,addressT,sizeof(address));
 
    iResult:=  bind(s, @address,  sizeof(address));
        if (iResult=0) then memo1.lines.add('bind OK') else memo1.lines.add('bind !OK');
 
    i:=sizeof(SOCKADDR_BTH);
    iResult:=getsockname(s ,addressT,i);
        if (iResult=0) then memo1.lines.add('getsockname OK') else memo1.lines.add('getsockname !OK');
 
    FillChar(service,0,sizeof(service));
    service.dwSize:=sizeof(service);
    service.lpszServiceInstanceName := 'My service';
    service.lpszComment := 'My comment';
    service.lpServiceClassId := @serviceID;
    service.dwNumberOfCsAddrs := 1;
    service.dwNameSpace := NS_BTH;
 
    FillChar(csAddr,0,sizeof(csAddr));
    csAddr.LocalAddr.iSockaddrLength:=sizeof(SOCKADDR_BTH);
    csAddr.LocalAddr.lpSockaddr := PSockAddr(@address);
    //csAddr.RemoteAddr.iSockaddrLength:=sizeof(address);
    //csAddr.RemoteAddr.lpSockaddr:=PSockAddr(@address);
    csAddr.iSocketType := SOCK_STREAM;
    csAddr.iProtocol := BTHPROTO_RFCOMM;
 
    service.lpcsaBuffer:=PCSADDR_INFO(@csAddr);
 
 
    if (SOCKET_ERROR= WSASetService(@service, RNRSERVICE_REGISTER, 0))
        then memo1.lines.add('WSASetService !OK') else memo1.lines.add('WSASetService OK');
 
    iResult:=listen(s,10);
        if (iResult=0) then memo1.lines.add('listen OK') else memo1.lines.add('listen !OK');
 
    memo1.lines.add('Before accept.........');
 
    i:=sizeof(addressT2);
    s2:=accept(s,PSockAddr(@addressT2),i);
 
    memo1.lines.add('after accept.........');
    if (s2 = INVALID_SOCKET)  then memo1.lines.add('müll');
 
  end;
end.
 
 


Bild


Die "accept" blockiert das Programm, wie sie soll, nur wenn ich vom Handy aus eine Verbindung aufbauen möchte, geht es einfach nicht.

Meine Farge ist:

Hat sich schon einmal jemand mit Windows Sockets in Bezug auf Bluetooth beschäftigt, und kann mir weiter helfen?

sieht jemand den Logischen oder inhaltlichen Fehler?

oder weiß jemand, wie ich das ganze mit Lazarus anders lösen kann?
Zuletzt geändert von Lori am So 6. Apr 2014, 15:19, insgesamt 1-mal geändert.
Grund: Korrektur Highlighter

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Re: Bluetooth Server mit Windows Sockets

Beitrag von Christian »

bist du damit weiter gekommen ?
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

Antworten