pc机上VC++6.0写的蓝牙服务,手机搜索不到

ryanho2008 2009-09-22 02:55:37
最近参照教程在我的电脑上用VC++写了一个关于蓝牙的程序程序。当我在电脑上插上蓝牙适配器后运行程序时,我的手机没法搜索到电脑蓝牙,不知道为什么,请高手指点。谢谢!代码如下:

#include "stdafx.h"
#include <initguid.h>
#include <winsock2.h>
#include <ws2bth.h>
#pragma comment (lib,"ws2_32.lib")
#pragma comment (lib,"msvcrt.lib")

DEFINE_GUID(SAMPLE_UUID,0x31b44148,0x041f,0x42f5,0x8e,0x73,0x18,0x6d,0x5a,0x47,0x9f,0xc9);

int _tmain(int argc, _TCHAR* argv[ ])
{
SOCKET server;
SOCKADDR_BTH sa;
int sa_len = sizeof(sa );

//initialize windows sockets
printf("initialize windows sockets...\n");
WORD wVersionRequested;
WSADATA wsaData;
wVersionRequested = MAKEWORD( 2,0 );
if( WSAStartup( wVersionRequested, &wsaData) !=NO_ERROR ) {
ExitProcess ( 2 ) ;
}

// create the server socket
printf("create the server socket...\n");
server = socket (AF_BTH , SOCK_STREAM , BTHPROTO_RFCOMM ) ;
if( SOCKET_ERROR ==server) {
ExitProcess ( 2 );
}

// bind the server socket to an arbitrary RFCOMM port
printf("bind the server socket to an arbitrary RFCOMM port...\n");
sa.addressFamily=AF_BTH;
sa.btAddr =0;
sa.port =BT_PORT_ANY ;
if(SOCKET_ERROR == bind (server ,(const sockaddr*)&sa , sizeof(SOCKADDR_BTH )))
{
ExitProcess ( 2 ) ;
}
listen( server, 1 );

// check which port we’re listening on
printf("check which port we’re listening on...\n");
if(SOCKET_ERROR==getsockname (server, (SOCKADDR*)&sa, &sa_len )) {
ExitProcess ( 2 ) ;
}
printf("listening on RFCOMM port: %d\n",sa.port);

// advertise the service
printf("advertise the service...\n");

CSADDR_INFO sockInfo ;
sockInfo.iProtocol=BTHPROTO_RFCOMM;
sockInfo.iSocketType=SOCK_STREAM;
sockInfo.LocalAddr.lpSockaddr=(LPSOCKADDR) &sa;
sockInfo.LocalAddr.iSockaddrLength=sizeof(sa );
sockInfo.RemoteAddr.lpSockaddr=(LPSOCKADDR) &sa;
sockInfo.RemoteAddr.iSockaddrLength=sizeof(sa );
WSAQUERYSET svcInfo={0};
svcInfo.dwSize=sizeof(svcInfo);
svcInfo.dwNameSpace=NS_BTH;
svcInfo.lpszServiceInstanceName="Win32 Sample Bluetooth Service";
svcInfo.lpszComment="Description of service..." ;
svcInfo.lpServiceClassId=(LPGUID)&SAMPLE_UUID;
svcInfo.dwNumberOfCsAddrs =1;
svcInfo.lpcsaBuffer=&sockInfo;
if( SOCKET_ERROR ==WSASetService(&svcInfo,RNRSERVICE_REGISTER,0))
{
printf("setService goes wrong...\n");
ExitProcess(2);
}
printf("setService goes ok...\n");//程序能够运行到这里来!

SOCKADDR_BTH ca;
int ca_len = sizeof(ca);
SOCKET client;
char buf[1024] = {0};
DWORD buf_len = sizeof(buf);
client=accept(server,(LPSOCKADDR) &ca, &ca_len );
if( SOCKET_ERROR == client ) {
printf("accept goes wrong...\n");
ExitProcess ( 2 ) ;
}
printf("accept goes ok...\n");

WSAAddressToString ( (LPSOCKADDR)&ca, (DWORD) ca_len,NULL,buf,&buf_len ) ;
printf( "Accepted connection from %s\n" , buf ) ;
int received =0;
received = recv (client,buf,sizeof(buf),0);
if(received>0) {
printf("received: %s\n",buf) ;
}
closesocket (client);
closesocket (server);
return 0;
}
...全文
1321 15 打赏 收藏 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
ryanho2008 2011-08-17
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 junux 的回复:]

引用 13 楼 ryanho2008 的回复:
其实上面的程序没有错,是当初没有设置好蓝牙适配器,要将蓝牙适配器设置为可发现


我是菜鸟.... 正在做同样的尝试
我用的是HP笔记本来同手机通信,在启动这个程序之前我有利用笔记本本身的蓝牙assistant同我的手机连接并传送文件。现在我用手机蓝牙搜索,总是搜到笔记本设置的蓝牙名字,而不是程序设置的。
请问楼主要怎么样解决呢?
[/Quote]

我记得在手机端搜索的时候有个设备名和服务名。你搜索到的是设备名,程序设置的是服务名,我们以前也碰到过这个问题。
junux 2011-07-27
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 ryanho2008 的回复:]
其实上面的程序没有错,是当初没有设置好蓝牙适配器,要将蓝牙适配器设置为可发现
[/Quote]

我是菜鸟.... 正在做同样的尝试
我用的是HP笔记本来同手机通信,在启动这个程序之前我有利用笔记本本身的蓝牙assistant同我的手机连接并传送文件。现在我用手机蓝牙搜索,总是搜到笔记本设置的蓝牙名字,而不是程序设置的。
请问楼主要怎么样解决呢?
ryanho2008 2010-04-12
  • 打赏
  • 举报
回复
其实上面的程序没有错,是当初没有设置好蓝牙适配器,要将蓝牙适配器设置为可发现
colour2006 2010-04-07
  • 打赏
  • 举报
回复
最简单的设备搜索与服务发现结合起来的结果
connString = agent.selectService(uuid,ServiceRecord.NOAUTHENTICATE_NOENCRYPT,false);
if(connString!=null)
{
//已经发现了服务
}
else
{
//没有发现错误
}
colour2006 2010-04-04
  • 打赏
  • 举报
回复
现在正在用pc端VC,客户端j2me来实现大家的想法,估计快有结果了,倒是后给大家分享。
malteser 2009-10-22
  • 打赏
  • 举报
回复
问题解决啦,你联系一下我吧。
ryanho2008 2009-10-22
  • 打赏
  • 举报
回复
终于解决了电脑端

现在
我想写一个用手机蓝牙连接电脑的程序。安装的诺基亚的sdk是:nS60_jme_sdk_2nd_e_fp3,因为我用的实体机是n72。开发环境是Netbeans 6.7.1,jdk是:jdk-6u16。我参考了很多例子的代码,发现都是一样的,但是我的程序就是打不开蓝牙设备...郁闷中...现在请求大家的帮忙。
以下是在模拟器中运行程序时总出现的错误:
javax.bluetooth.BluetoothStateException: SymbianOS error = -5 : System:\nFeature is not supported
at javax.bluetooth.LocalDevice. <init>(LocalDevice.java:100)
at javax.bluetooth.LocalDevice.getLocalDevice(LocalDevice.java:120)
at j2meproject.bluetooth.MobileToPCController.BTServer.run(BTServer.java:100)
at java.lang.Thread.run(), bci=11

以下是我的部分代码:
public void run(){
try {
localDevice = LocalDevice.getLocalDevice();
//设置本地蓝牙设备为能够被发现
localDevice.setDiscoverable(DiscoveryAgent.GIAC);

StringBuffer url=new StringBuffer("btspp://");
url.append("localhost").append(':');
url.append(uuid.toString());
url.append(";name=SSS");
url.append(";authorize=false");
notifier = (StreamConnectionNotifier) Connector.open(url.toString());
record = localDevice.getRecord(notifier);
conn = notifier.acceptAndOpen();
//in = conn.openDataInputStream();
//out = conn.openDataOutputStream();
sendText=30;
//System.out.println("准备就绪");
ready = true;
}catch(Exception e){
sendText = 31;
e.printStackTrace();
return;
}
sendText = 333;
}

请问这是为什么?有解决的办法吗?谢谢!
ryanho2008 2009-10-12
  • 打赏
  • 举报
回复
还是不行....继续期待...
mldxs 2009-10-05
  • 打赏
  • 举报
回复
装个蓝牙驱动吧 !
VIT很好使的
我前几天刚刚装过一个
ryanho2008 2009-10-02
  • 打赏
  • 举报
回复
还是不行....继续期待...
jmulxg 2009-09-24
  • 打赏
  • 举报
回复
使用widcomm驱动的蓝牙适配器,二者的协议不一样
不过最新版的ivr好像也可以被symbian 识别
  • 打赏
  • 举报
回复
会不会是蓝牙适配器的驱动有问题呢
ryanho2008 2009-09-24
  • 打赏
  • 举报
回复
是即插即用免驱动的蓝牙,我写了一个小程序可以用我的蓝牙发现手机蓝牙,返回手机蓝牙的地址、名字。但是手机收索不到电脑蓝牙...
ryanho2008 2009-09-23
  • 打赏
  • 举报
回复
期待高手指点....
ryanho2008 2009-09-22
  • 打赏
  • 举报
回复
程序运行结果:
initialize windows sockets...
create the server socket...
bind the server socket to an arbitrary RFCOMM port...
check which port we’re listening on...
listening on RFCOMM port:1
setService goes ok...
用手机蓝牙去搜索搜索不到!
大气污染是影响公众健康与生态环境的重要问题,精准的空气质量时空预测与污染源贡献度量化是精准治污的关键支撑。针对现有研究多源融合不充分、时空关联刻画不足、预测与源解析割裂三方面缺陷,本文设计实现了城市空气质量时空预测与污染源贡献度分析系统,融合监测、气象、工业排放与交通四类数据,构建基于时空注意力的LSTM(STAM-LSTM)预测模型与基于正定矩阵因子分解(PMF)的源解析模型,形成数据融合-特征工程-预测-源解析-可视化闭环。 系统实现四类数据时空对齐与融合,构建时序与空间邻域特征,以普通克里金插值生成1km网格浓度场;STAM-LSTM引入时空注意力自适应学习站点间污染传输时变权重,以72小时输入预测未来24小时逐小时PM2.5浓度;PMF识别交通、工业、燃煤、扬尘与二次生成五个源因子,量化各源全年贡献度并分析时空演变。 实验表明:STAM-LSTM预测RMSE 24.6、MAE 17.8、R² 0.88,相对LSTM基线(30.2)提升18.5%;普通克里金插值误差8.9,优于反距离加权(11.4);源解析显示交通源28.4%、工业源23.1%、燃煤源19.6%为主要贡献源,冬季燃煤源升至27.3%、早高峰交通源达34.8%,下风向工业源贡献高出上风向8~12个百分点;减排情景显示交通源减排20%可使年均PM2.5下降5.7%,与源贡献度排序一致。 系统按五模块14组件实现,功能测试16项用例全部通过,为大气污染预警、源管控与减排政策制定提供了决策依据。 【课程报告内容】 摘要 第1章 绪论 第2章 相关技术与理论 第3章 系统需求分析 第4章 系统总体设计 第5章 系统详细设计与实现 第6章 系统测试与分析 第7章 总结与展望 参考文献 附件-实现指南
基于iTransformer-BiGRU-KAN多模型融合的滚动轴承剩余寿命预测研究(Python代码实现)内容概要:本文提出了一种基于iTransformer-BiGRU-KAN多模型融合的滚动轴承剩余寿命预测方法,旨在通过结合多种先进深度学习模型的优势,提升在复杂工况下的预测精度与鲁棒性。该方法利用iTransformer捕捉长期时间序列中的全局依赖关系,通过BiGRU模型提取双向时序特征,最后引入KAN(Kernel Attention Network)增强非线性映射与关键特征的自适应加权能力,实现对轴承退化过程的精准建模。文中详细介绍了模型架构设计、训练流程及在公开数据集上的实验验证,结果表明该融合模型相比单一模型在预测精度和稳定性方面均有显著提升。; 适合人群:具备一定机器学习与深度学习基础,从事设备故障诊断、工业大数据分析或智能运维相关领域的研究人员及工程技术人员,尤其适合研究生及以上学历或有相关项目经验的专业人员。; 使用场景及目标:①应用于工业设备状态监测与预测性维护系统中,实现对滚动轴承等关键部件剩余寿命的精准预测;②为复杂时间序列回归任务提供多模型融合的设计思路与技术参考;③推动深度学习在智能制造与工业物联网领域的落地应用。; 阅读建议:建议读者结合Python代码实现部分,深入理解各子模型的接口设计与融合逻辑,重点关注特征融合机制与注意力权重的可视化分析,以便在实际项目中灵活调整与优化模型结构。

3,119

社区成员

发帖
与我相关
我的任务
社区描述
塞班系统(Symbian系统)是塞班公司为手机而设计的操作系统,它的前身是英国宝意昂公司的 EP ( Electronic Piece of cheese)操作系统。
社区管理员
  • Symbian社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧