Winsock Interface Sample
The SSA sample application illustrates the use of the Windows CE–based Bluetooth stack over the Winsock interface.
The compiled sample generates an Ssa.exe application. It can be started as server or client. When connected, users can exchange text messages or files.
Note Either the port name or service UUID can be specified. If the UUID is specified, the server registers the SDP entry and the client connects with the service UUID instead of the server channel.
To view supported command line options, use SSA /?
Usage
ssa server {-g <GUID> | -c <rfcomm_chnl> }
ssa client <server_bt_addr> { -g <GUID> | -c <rfcomm_chnl> }
The following table describes the parameters needed when using the SSA sample application.
Parameters | Description |
---|---|
GUID | SDP Service Class ID. |
rfcomm_chnl | RFCOMM channel (between 1 and 31). |
server_bt_addr | Bluetooth address of the server. |
Server
When the server starts, it creates a socket that is associated to the Bluetooth stack. A socket stream is set in the following manner.
SOCKET s = socket (AF_BT, SOCK_STREAM, BTHPROTO_RFCOMM);
To set the socket up for binding, designate the address family, in the SOCKADDR_BTH data structure, as Bluetooth.
sa.addressFamily = AF_BT;
Connections can be set to reference an RFCOMM channel or an SDP service GUID. To connect through an RFCOMM channel, register the channel number in the data structure in the following manner.
sa.port = channel & 0xff;
If you specified a GUID argument in the command line, register that GUID through the data field in the following manner.
GetGUID (arg3, &serviceClassId);
The following line of code binds the socket.
bind (gServerSocket, (SOCKADDR *)&sa, sizeof(sa));
If the binding is successful, the SDP service connection is initiated with the BthNsSetService function.
BthNsSetService(&Service, RNRSERVICE_REGISTER, 0);
The next step is to set the server up to listen to the socket stream for instructions.
listen (gServerSocket, 5);
Client
When the client starts, it creates a socket that is associated to the Bluetooth stack. A socket stream is set in the following manner.
SOCKET s = socket (AF_BT, SOCK_STREAM, BTHPROTO_RFCOMM);
To set the socket up, designate the address family, in the SOCKADDR_BTH data structure, as Bluetooth. Register the Bluetooth server address through the btAddr field.
sa.addressFamily = AF_BT;
sa.btAddr = b;
Connections can be set to reference an RFCOMM channel or an SDP service GUID. To connect through an RFCOMM channel, register the channel number in the data structure in the following manner.
sa.port = channel & 0xff;
If you specified a GUID argument in the command line, register that GUID through the data field in the following manner.
GetGUID (arg4, &sa.serviceClassId);
The following line of code connects the socket to the stream.
connect (s, (SOCKADDR *)&sa, sizeof(sa));
If the connection is successful, write and read worker threads are created.
CloseHandle (CreateThread(NULL, 0, ReadThread, (LPVOID)hCommPort, 0, NULL));
WriteThread ((LPVOID)hCommPort);
The WriteThread sends data, entered by the user, over the socket stream, while the ReadThread, on the listening device, displays the received data on the screen.
Sample Location
%_WINCEROOT%\Public\Common\Oak\Drivers\Bluetooth\Sample\Ssa
**Note **This sample application has not been thoroughly tested and is not intended for production use.
See Also
Last updated on Thursday, April 08, 2004
© 1992-2003 Microsoft Corporation. All rights reserved.