C++所有 AT 命令的短信返回错误 |PC<->通过蓝牙和winsocket的移动连接

C++ all AT command's for SMS return's ERROR | PC<->Mobile connection via bluetooth & winsocket

本文关键字:gt 连接 移动 winsocket 所有 返回 AT 错误 lt C++ PC      更新时间:2023-10-16

我正在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+CMGLr";
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 == "rnERRORrn"

谢谢你的任何建议!如果您对问题有任何疑问,我会善意地解释。 问候 菲 利 普。

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

我用了RemoteEndPoint.serviceClassId = HandsfreeServiceClass_UUID;

事情就是这样,你不能从免提发送短信,你可以打电话,所以有什么建议我应该使用哪个UUID,所以短信AT命令应该有效吗?

谢谢。