2015-09-11 131 views
1

我已經用winsock的Winsock:藍牙客戶端 - 服務器連接不

寫了一個小的藍牙服務器和客戶端progrem我無法弄清楚爲什麼客戶端不獲取連接到服務器。兩者都運行在不同的PC和 都通過藍牙配對。

服務器代碼

void server() 
{ 
    SOCKET server_socket = socket(AF_BTH, SOCK_STREAM, BTHPROTO_RFCOMM), new_socket; 
    if (server_socket == INVALID_SOCKET) 
    { 
     cout << "socket creation failed...Error code : " << WSAGetLastError() << endl; 
     Sleep(2000); 
     return; 
    } 
    cout << "socket created" << endl; 
    SOCKADDR_BTH sa, sa2; 
    int channel = 0, len=sizeof(sa2); 
    memset(&sa, 0, sizeof(SOCKADDR_BTH)); 
    sa.addressFamily = AF_BTH; 
    sa.port = channel & 0xff; 

    //bind 
    if (bind(server_socket, (SOCKADDR *)&sa, sizeof(sa))) 
    { 
     cout << "Binding failed...Error code : " << WSAGetLastError() << endl; 
     closesocket(server_socket); 
     Sleep(2000); 
     return; 
    } 
    cout << "binding done" << endl; 
    cout << "\nWaiting for client" << endl; 
    listen(server_socket, 3); 
    new_socket = accept(server_socket, (sockaddr *)&sa2, &len); 
    cout<<"connection accepted"; 
} 

的客戶端代碼

void client() 
{ 
    SOCKET client_socket = socket(AF_BTH, SOCK_STREAM, BTHPROTO_RFCOMM); 
    int channel = 0; 
    BTH_ADDR bt_addr; 
    char* server_address = "34:02:86:26:c1:62"; 
    if (client_socket == INVALID_SOCKET) 
    { 
     cout << "socket creation failed...Error code : " << WSAGetLastError() << endl; 
     Sleep(2000); 
     return; 
    } 
    cout << "socket created" << endl; 
    if (str2ba(server_address, &bt_addr) == 1) 
    { 
     cout << "address conversion error..." << endl; 
     Sleep(2000); 
     return; 
    } 
    SOCKADDR_BTH sa; 
    sa.addressFamily = AF_BTH; 
    sa.port = channel & 0xff; 
    sa.btAddr = bt_addr; 
    cout << "\nconnecting..." << endl; 
    if (connect(client_socket, (sockaddr *)&sa, sizeof(sockaddr))) 
    { 
     cout << "Error in connecting...Error code : " << WSAGetLastError() << endl; 
     closesocket(client_socket); 
     Sleep(2000); 
     return; 
    } 
    cout << "\nConnected" << endl; 
    Sleep(2000); 
} 

int str2ba(char *str_bt_addr, BTH_ADDR *bt_addr)//for converting string to bluetooth address 
{ 
    unsigned int addr[6]; 
    if (sscanf_s(str_bt_addr, "%02x:%02x:%02x:%02x:%02x:%02x", 
    &addr[0], &addr[1], &addr[2], &addr[3], &addr[4], &addr[5]) != 6) 
    { 
     return 1; 
    } 
    *bt_addr = 0; 
    BTH_ADDR tmpaddr; 
    int i; 
    for (i = 0;i < 6;++i) 
    { 
     tmpaddr = (BTH_ADDR)(addr[i] & 0xff); 
     *bt_addr = ((*bt_addr) << 8) + tmpaddr; 
    } 
    return 0; 
} 

爲什麼這些沒有得到連接?我錯過了什麼? 請幫幫我。 在此先感謝您的幫助。

回答

0

在我短暫的藍牙體驗中,問題通常出現在SOCKADDR_BTH聲明的某處。

我硬編碼的每個端點的MAC地址: 「38:2D:E8:B9:FA:EB」 以十六進制

RemoteEndPoint.btAddr = BTH_ADDR(0x382DE8B9FAEB); 

另外,還要確保你的端口是相同的每個端點,我用:

RemoteEndPoint.port = 0; 

LocalEndpoint.port = 0; 

我這裏有一些代碼:C++ WinSock Bluetooth Connection - AT Command - Error Received,我有一個問題也。

藍牙並不像有些人想象的那麼容易,因此OP的缺少答案

相關問題