我正在用C ++创建Windows应用程序,它通过蓝牙和winsock连接PC和移动设备。允许您通过计算机从移动电话拨打和发送消息。
我正在使用AT命令告诉移动设备我想做什么。与移动设备配对并使用At命令强制呼叫
ATD+420******;
工作完美,但所有处理短信的命令都是
AT+CMGL, AT+CMGF, AT+CMGS etc.
返回错误。
以下是通过蓝牙和插座连接PC和手机的代码:
SOCKADDR_BTH RemoteEndPoint;
RemoteEndPoint.port = 0;
RemoteEndPoint.addressFamily = AF_BTH;
RemoteEndPoint.btAddr = m_foundDevices[m_deviceIndex].Address.ullLong;
RemoteEndPoint.serviceClassId = HandsfreeServiceClass_UUID;
int BTHAddrLength = sizeof(RemoteEndPoint);
// Create the socket.
if ((m_localSocket = socket(AF_BTH, SOCK_STREAM, BTHPROTO_RFCOMM)) == INVALID_SOCKET)
{
// handle error.
}
// Connect the socket.
if ((iResult = connect(m_localSocket, (SOCKADDR *)&RemoteEndPoint, sizeof(RemoteEndPoint))) == INVALID_SOCKET)
{
// handle error.
}
通知行
RemoteEndPoint.serviceClassId = HandsfreeServiceClass_UUID
我认为问题出在这里,因为你无法从免提发送短信,但当我使用另一个UUID时,它甚至不与移动配对。
===这里仅供参考,我如何从手机发送和接收数据===
char recvbuf[DEFAULT_BUFLEN] = "";
const char *sendbuf = "AT+CMGL\r";
int len = (int)strlen(sendbuf);
if ((iResult = send(m_localSocket, sendbuf, len, MSG_OOB)) == SOCKET_ERROR)
{
// handle error. return ~0
}
if ((iResult = recv(m_localSocket, recvbuf, recvbuflen, 0)) == SOCKET_ERROR)
{
// handle error. return ~0
}
// Here recvbuf == "\r\nERROR\r\n"
感谢您的任何建议!如果您对问题有任何疑问,我将向您解释。 问候, 菲利普。
答案 0 :(得分:1)
我发现,问题出在为连接指定UUID。
我使用了RemoteEndPoint.serviceClassId = HandsfreeServiceClass_UUID;
那就是那件事,你不能从免提发送短信,你可以打电话,所以我应该使用UUID的任何建议,所以短信AT命令应该有效吗?
谢谢。