So ich hab jetzt mal wieder ein bisschen in der Bluetooth
API geschaut und ich denke der Socket Ansatz ist der richtige. Das Androidprogramm in Java benutzt auch einen Socket, also müsste das dann ja so hinhauen. Läuft dann über RFComm.
Hab mal jetzt ein bisschen was aus der
API zusammen kopiert und halbwegs nach Delphi portiert. Können noch Fehler drin sein oder Pseudocode enthalten sein. Hab jetzt auch gerade keine Möglichkeit das zu testen, weil ich auf Arbeit bin. Aber vielleicht können ja die Socket Experten mal nen Blick drüber werfen.
Delphi-Quellcode:
var
wsaD: TWsaData;
iResult: integer;
ListenSocket: TSocket;
name: SOCKADDR_BTH;
begin
//----------------------
// Initialize Winsock
iResult := WSAStartup(WINSOCK_VERSION, @wsaD);
if (iResult <> NO_ERROR)
ShowMessage('
Error at WSAStartup()');
//----------------------
// Create a SOCKET for listening for
// incoming connection requests.
// Parameters for Bluetooth Socket
ListenSocket := socket(AF_BTH, SOCK_STREAM, BTHPROTO_RFCOMM);
if (ListenSocket = INVALID_SOCKET)
then
begin
ShowMessage('
Error at socket(): ' + WSAGetLastError());
WSACleanup();
exit;
end;
//----------------------
// The sockaddr_in structure specifies the address family,
// IP address, and port for the socket that is being bound.
name.addressFamily := AF_BTH;
name.btAddr := 0;
name.serviceClassId := NULL_GUID;
name.port := BT_PORT_ANY;
if (bind(ListenSocket, TSockAddr(@
name), sizeof(
name)) = SOCKET_ERROR)
then
begin
ShowMessage('
bind() failed.');
closesocket(ListenSocket);
exit;
end;
//----------------------
// Listen for incoming connection requests
// on the created socket
if (listen(ListenSocket, SOMAXCONN) = SOCKET_ERROR)
then
ShowMessage('
Error listening on socket.');
ShowMessage('
Listening on socket...');
WSACleanup();
exit;
end;