C ++所有AT命令用于SMS返回的ERROR | PC< - >移动连接通过蓝牙& WINSOCKET

时间:2017-07-04 15:54:55

标签: c++ bluetooth sms winsock at-command

我正在用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"

感谢您的任何建议!如果您对问题有任何疑问,我将向您解释。 问候, 菲利普。

1 个答案:

答案 0 :(得分:1)

我发现,问题出在为连接指定UUID。

我使用了RemoteEndPoint.serviceClassId = HandsfreeServiceClass_UUID;

那就是那件事,你不能从免提发送短信,你可以打电话,所以我应该使用UUID的任何建议,所以短信AT命令应该有效吗?

谢谢。