我正在用C ++创建Windows应用程序,该应用程序通过蓝牙和Winsock将PC与手机连接起来。允许您通过计算机通过手机呼叫和发送消息。

我正在使用AT命令来告诉手机我想做什么。与移动设备配对并使用At命令强制呼叫

ATD+420******;


工作完美,但所有用于处理SMS的命令

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"


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

最佳答案

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

我用RemoteEndPoint.serviceClassId = HandsfreeServiceClass_UUID;

就是这样,您不能从免提发送短信,您只能打电话,所以我应该使用哪个UUID建议,以便短信AT命令起作用?

谢谢。

关于c++ - C + +所有AT命令的SMS返回的错误PC <->通过蓝牙和Winsocket进行移动连接,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44910136/

10-11 19:37
查看更多