AndroidデバイスからBluetooth経由でWindowsラップトップにいくつかの文字列データを転送したいと思います。 Microsoftで提供されているwinsock2でブルートゥースのコードサンプルを使用すると、以下のコードを使用してデータを転送することができました。残念ながら、送信する文字列の先頭にバイトオーダーマークが付きます。もちろん、私は単純に最初の4バイトを削除することができますが、それは私に少し汚れているようです。私が使用できる他のオプションはありますか?C++ - winsock上のBluetooth、バイトオーダーのマークを削除する方法
C++ - 受信するためのコード(少し読みやすくするために変更 - >はコメントを処理しないエラーなし、など)
ClientSocket = accept(LocalSocket, NULL, NULL);
BOOL bContinue = TRUE;
pszDataBuffer = (char *)HeapAlloc(GetProcessHeap(),
HEAP_ZERO_MEMORY,
CXN_TRANSFER_DATA_LENGTH);
pszDataBufferIndex = pszDataBuffer;
uiTotalLengthReceived = 0;
while (bContinue && (uiTotalLengthReceived < CXN_TRANSFER_DATA_LENGTH)) {
iLengthReceived = recv(ClientSocket,
(char *)pszDataBufferIndex,
(CXN_TRANSFER_DATA_LENGTH - uiTotalLengthReceived),
0);
switch (iLengthReceived) {
case 0: // socket connection has been closed gracefully
bContinue = FALSE;
break;
case SOCKET_ERROR:
wprintf(L"=CRITICAL= | recv() call failed. WSAGetLastError=[%d]\n", WSAGetLastError());
bContinue = FALSE;
ulRetCode = CXN_ERROR;
break;
default:
pszDataBufferIndex += iLengthReceived;
uiTotalLengthReceived += iLengthReceived;
break;
}
}
if (CXN_SUCCESS == ulRetCode) {
pszDataBuffer[uiTotalLengthReceived] = '\0';
wprintf(L"*INFO* | Received following data string from remote device:\n%s\n", (wchar_t *)pszDataBuffer);
closesocket(ClientSocket);
ClientSocket = INVALID_SOCKET;
}
Androidのコード送るため:
OutputStream socketOutpuStream = socket.getOutputStream();
socketOutputStream.write(dataString.getBytes(Charsets.UTF_16));