Mengirim gambar melalui bluetooth dari PC ke ponsel

pemrograman


Hai ,

Saya perlu mengirim gambar melalui bluetooth dari aplikasi saya di desktop (Windows XP) ke ponsel. Adakah yang tahu bagaimana cara melakukan itu? Bisakah Anda memberi saya beberapa petunjuk dan referensi untuk memulai? Apakah mungkin melakukannya menggunakan Windows bluetooth SDK?

Bantuan apa pun dihargai.

Terima kasih.

Memperbarui:

Oke. aku menemukan ini http://support.microsoft.com/kb/883259#81[^] . Di akhir halaman, terdapat opsi kirim/terima file. Saya ingin melakukan pit secara terprogram. Adakah panduan untuk melakukannya secara terprogram?

Solusi 3

Bluetooth API – adalah ide yang bagus
Anda dapat menggunakan langkah selanjutnya:
1. Enum layanan telepon yang tersedia dengan fungsi WSALookupServiceBegin, WSALookupServiceNext
2. Dapatkan alamat layanan Transfer File OBEX
3. Buat soket bluetooth
4. Hubungkan ke alamat layanan yang ditemukan
5. Menerapkan protokol Transfer File OBEX (perintah Hubungkan dan Pasang – http://netwinder.osuosl.org/pub/netwinder/docs/nw/irda/IrOBEX12.pdf[^], http://dotcom.bluetoothsig.org/SiteCollectionDocuments/GOEP_SPEC_V12.pdf[^]) dan mengirim file melalui soket
Saya dapat membagikan proyek pengujian sendiri, tetapi tidak tahu cara melampirkannya ke solusi

Solusi 4

C++
<pre>/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// 
// MSDN Bluetooth and Connect
// See: https://msdn.microsoft.com/en-us/library/windows/desktop/aa362901(v=vs.85).aspx
//
// MSDN Send Function
// See: https://msdn.microsoft.com/en-us/library/windows/desktop/ms740149(v=vs.85).aspx
// 
// MSDN Bluetooth and read or write operations:
// See: https://msdn.microsoft.com/en-us/library/windows/desktop/aa362907(v=vs.85).aspx
// 
// Error Codes: 
// See: https://msdn.microsoft.com/en-us/library/windows/desktop/ms740668(v=vs.85).aspx
// 
#include "zss.cmnlib.h"
#include <stdlib.h>
#include <stdio.h>
#include <iostream>
// #include <afxwin.h>
#include <WinSock2.h>
#include <bthsdpdef.h>
#include <bluetoothapis.h>

#include <ws2bth.h>
// #include "Zss.Zsslog.h"
// Preprocessor Directive: Pragma's:
// Need to link with Ws2_32.lib
#pragma comment(lib, "ws2_32.lib")

// define Directive's:
#define DEFAULT_BUFLEN 512

DEFINE_GUID(GUID_NULL, "00000000-0000-0000-0000-000000000000");


int __cdecl main(int argc, char **argv)
{
    std::cout << "******************************************************\r\n";

    //--------------------------------------------
    // Locals:
    //--------------------------------------------
    int result = 0;
    ULONG iResult = 0;

    //--------------------------------------------
    // Prep the Buffer's:
    //--------------------------------------------
    int recvbuflen = DEFAULT_BUFLEN;
    char recvbuf[DEFAULT_BUFLEN] = "";
    // char *sendbuf = "AT+COPS?\r";
    char *sendbuf = "AT+BTVER?\r";
    int len = (int)strlen(sendbuf);

    //--------------------------------------------
    // Initialise WinSock.
    //--------------------------------------------
    WSADATA WSAData = { 0 };
    WORD wVersionRequested = MAKEWORD(2, 2);
    if ((iResult = WSAStartup(wVersionRequested, &WSAData)) != 0)
    {
    }
    std::cout << "WINSOCK: 'WSAData' Return Code: " << WSAGetLastError() << "\r\n";


    //--------------------------------------------
    // The WinSock Socket.
    //--------------------------------------------
    SOCKET LocalSocket = INVALID_SOCKET;


    //--------------------------------------------
    // Local End Point SOCKADDR_BTH.
    //--------------------------------------------
    SOCKADDR_BTH LocalEndpoint;
    // number of service channel, 0 or BT_PORT_ANY;
    LocalEndpoint.port = 0;
    LocalEndpoint.addressFamily = AF_BTH;
    LocalEndpoint.btAddr = 0;
    LocalEndpoint.serviceClassId = GUID_NULL;
    std::cout << "   Local EndPoint Address: " << LocalEndpoint.btAddr << "\r\n";


    //--------------------------------------------
    // Remote End Point SOCKADDR_BTH.
    //--------------------------------------------
    SOCKADDR_BTH RemoteEndPoint;
    // number of service channel, 0 or BT_PORT_ANY;
    RemoteEndPoint.port = 0;
    RemoteEndPoint.addressFamily = AF_BTH;
    // bt address of my smartphone ;
    RemoteEndPoint.btAddr = BTH_ADDR(0xD428D57436B0);
    // RemoteEndPoint.serviceClassId = SerialPortServiceClass_UUID;   // COM Protocol
    // RemoteEndPoint.serviceClassId = OBEXFileTransferServiceClass_UUID;   // error, connect return 10049
    //RemoteEndPoint.serviceClassId = HandsfreeServiceClass_UUID; // RFCOMM_PROTOCOL_UUID
    RemoteEndPoint.serviceClassId = OBEXObjectPushServiceClass_UUID;
    int BTHAddrLength = sizeof(RemoteEndPoint);
    std::cout << "   Remote EndPoint Address: " << RemoteEndPoint.btAddr << "\r\n";

    //--------------------------------------------
    // Create the socket.
    //--------------------------------------------
    if ((LocalSocket = socket(AF_BTH, SOCK_STREAM, BTHPROTO_RFCOMM)) == INVALID_SOCKET)
    {
    }
    std::cout << "WINSOCK: 'socket' Return Code: " << WSAGetLastError() << "\r\n";

    //--------------------------------------------
    // Bind the socket.
    //--------------------------------------------
    if ((iResult = bind(LocalSocket, (SOCKADDR *)&LocalEndpoint, sizeof(LocalEndpoint))) == SOCKET_ERROR)
    {
    }
    std::cout << "WINSOCK: 'bind' Return Code: " << WSAGetLastError() << "\r\n";

    //--------------------------------------------
    // Connect the socket.
    //--------------------------------------------
    if ((iResult = connect(LocalSocket, (SOCKADDR *)&RemoteEndPoint, sizeof(RemoteEndPoint))) == INVALID_SOCKET)
    {
    }
    std::cout << "WINSOCK: 'connect' Return Code: " << WSAGetLastError() << "\r\n";

    //--------------------------------------------
    // Send the Buffer.
    //--------------------------------------------
    // if ((iResult = send(LocalSocket, sendbuf, len, MSG_OOB)) == SOCKET_ERROR)
    char *strPath = "D:/bt.txt";
    const char package[] = 
    /* Connect | 2B of length| OBEX Ver 1.0| Flag| Max Size               */    
      {0x80,    0x00, 0x07,         0x10, 0x00, 2048>>8, 2048&0xFF};

    if ((iResult = send(LocalSocket, package, sizeof(package)/sizeof(char), 0)) == SOCKET_ERROR)
    {
    }
    std::cout << "WINSOCK: 'send' Return Code: " << WSAGetLastError() << "\r\n";

    //--------------------------------------------
    // Receive until the peer termination.
    //--------------------------------------------
    if ((iResult = recv(LocalSocket, recvbuf, recvbuflen, 0)) == SOCKET_ERROR){
        std::cout << "WINSOCK: 'recv' Return Code: " << WSAGetLastError() << "\r\n";
        return -1;
    }
    CString strdata = Byte2Ascn((BYTE*)recvbuf, iResult, 16);
    std::wcout << "recv data: " << (LPCTSTR) strdata << std::endl;
    
    if(0xA0 == static_cast<unsigned char>(recvbuf[0])){
        const char* str = "82002bc30000000f01001100620074002e007400780074000049001268656c6c6f2c20776f726c64200d0a";
                  /* Put | 2B len| HI len | Name|   b   t   .   t   x   t   |HI end|h e l l o ,   w o r l d  \r\n   */    
        int dstlen = strlen((const char*)str)/2;
        BYTE* strdst = (BYTE*)malloc(dstlen * sizeof(BYTE));
        Asc2Byten((void*)str, strdst, dstlen);

        const char package[] = 
        {  
            0x85,0x00,0x08,0x02,0x00,0x01,0x00,0x03
            // 0x82,0x01,0x65,0x01,0x00,0x0F,0x00,0x31,0x00,0x2E,0x00,0x6D,0x00,0x69,0x00,0x64,
            // 0x00,0x00,0xC3,0x00,0x00,0x01,0x39,0x44,0x00,0x12,0x32,0x30,0x30,0x35,0x30,0x32,
            // 0x31,0x34,0x54,0x31,0x39,0x34,0x39,0x33,0x38,0x49,0x01,0x3C,0x4D,0x54,0x68,0x64
            
        };
        if ((iResult = send(LocalSocket, (const char*)strdst, dstlen, 0)) == SOCKET_ERROR)
        {
        }
        std::cout << "WINSOCK: 'send' Return Code: " << WSAGetLastError() << "\r\n";
        delete strdst;

        if ((iResult = recv(LocalSocket, recvbuf, recvbuflen, 0)) == SOCKET_ERROR){
            std::cout << "WINSOCK: 'recv' Return Code: " << WSAGetLastError() << "\r\n";
            return -1;
        }
        strdata = Byte2Ascn((BYTE*)recvbuf, iResult, 16);
        std::wcout << "recv data: " << (LPCTSTR) strdata << std::endl;
    }

    //--------------------------------------------
    // Shutdown the connection.
    //--------------------------------------------
    if ((iResult = shutdown(LocalSocket, SD_SEND)) == SOCKET_ERROR)
    {
    }
    std::cout << "WINSOCK: 'shutdown' Return Code: " << WSAGetLastError() << "\r\n";


    //--------------------------------------------
    // Close the Socket.
    //--------------------------------------------
    if ((iResult = closesocket(LocalSocket)) == SOCKET_ERROR)
    {
    }
    std::cout << "WINSOCK: 'closesocket' Return Code: " << WSAGetLastError() << "\r\n";


    WSACleanup();


    std::cout << "END: " << "Application has completed!" << "\r\n";


    std::getchar();


    return 0;

}

コメント

タイトルとURLをコピーしました