2017-01-20 10 views
0

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)); 

答えて

0

[OK]を、私は感じます今はかなり愚かです。同種のJava環境で何年も働いて、unicodecharsetをパラメータとしてgetBytes()を呼び出すと、Javaがバイトオーダーマークを設定することを完全に忘れてしまいました。 dataString.getBytes(Charsets.UTF_16)dataString.getBytes(StandardCharsets.UTF_16LE)(ウィンドウはリトルエンディアン)に変更した後、アンドロイド側はすべて正常に動作します。

関連する問題