首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > WinCE >

蓝牙SPP的有关问题

2012-03-06 
蓝牙SPP的问题以下是放在CE上用作服务器端的代码:SOCKET s socket (AF_BT, SOCK_STREAM, BTHPROTO_RFCOM

蓝牙SPP的问题
以下是放在CE上用作服务器端的代码:
   
  SOCKET s = socket (AF_BT, SOCK_STREAM, BTHPROTO_RFCOMM);  

  SOCKADDR_BTH sa;  
  memset (&sa, 0, sizeof(sa));  
   
  sa.addressFamily = AF_BT;  
  sa.port = 0;
  sa.btAddr = 0x0017E832C318; //CE上蓝牙的地址

  if (bind (s, (SOCKADDR *)&sa, sizeof(sa)))  
  {  
  wprintf (L"Bind failed, error = %d\n", WSAGetLastError ());  
  goto exit;  
  }

  iLen = sizeof(sa);

  if (SOCKET_ERROR == getsockname(s, (SOCKADDR*)&sa, &iLen))  
  {  
  wprintf (L"getsockname failed, error = %d\n", WSAGetLastError ());  
  goto exit;  
  }
   
  // 注册SPP服务
  if(BTSetSPPService((unsigned char)sa.port) == FALSE )  
  {  
  RETAILMSG(1,(L"BTAGSVC: Error adding SDP record. error code = %d \n",GetLastError()));  
  goto exit;  
  }  
  
  if (listen (s, 2))  
  {  
  wprintf (L"Listen failed, error = %d\n", WSAGetLastError ());  
  }  

  while(1)  
  {  
  sa2.addressFamily = AF_BT;  
   
  if(s == INVALID_SOCKET)  
{
  wprintf (L" socket S is invalid socket \n");  
}
   
wprintf (L"wait for connect......! \n");  
  SPPDATABUF.sockClient = accept (s,(sockaddr *)&sa2, &size); // 一直都接收不到客户端的连接
  .................
  }


accept会一直被阻塞,接收不到连接。
从PC用蓝牙软件能发现CE上的蓝牙SPP服务,但双击连接时却会报“蓝牙服务不可用”的错误。


[解决办法]
蓝牙 还没弄过,

MARK,顶起,
我也学习下。
[解决办法]
即将要做这个事情。呵呵。
[解决办法]
一般都是直接控制蓝牙模块,还没有如此玩过蓝牙,顶一个
[解决办法]

探讨
一般都是直接控制蓝牙模块,还没有如此玩过蓝牙,顶一个

[解决办法]
从PC用蓝牙软件能发现CE上的蓝牙SPP服务,但双击连接时却会报“蓝牙服务不可用”的错误。

我个情况这我以前也碰到过,时间久了~好像是要确定你的CE上的蓝牙这项服务支持、开启吗?

我当时是用USB接口的蓝牙,在CE6.0平台上,参考MS的帮助的

不过我是用CE自带的应用程序,当然你也可以自己写


[解决办法]
我看的SSP server寫法跟樓主幾乎差不多
只差在沒有註冊 BTSetSPPService跟chennel
樓主的 client是怎摸實現的呢?
阻塞在accept是不是client根本沒過來(channel不相同?)


[解决办法]
SPP应该串口服务吧,
注册串口服务端的话用这个就行:
PORTEMUPortParams pp;
memset (&pp, 0, sizeof(pp));
pp.flocal = TRUE;
pp.channel = RFCOMM_CHANNEL_MULTIPLE ;
RegisterDevice (L"COM", 7, L"btd.dll", (DWORD)&pp);

热点排行