如何使用C编程语言实现蓝牙微微网?

时间:2015-01-14 09:26:26

标签: c++ c bluetooth

我正在尝试使用C编程语言实现蓝牙微微网。我已经阅读了一些论文,并且还经历了一些例子。但我没有得到适当的输出。我使用以下示例设计了服务器和客户端,请检查此link。请查看我正在处理的代码:

任何人都可以建议一个适当的方法来实现它。谢谢。

slave.c

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <pthread.h>
#include <sys/socket.h>
#include <bluetooth/bluetooth.h>
#include <bluetooth/l2cap.h>
#include <unistd.h>
void send_message_function(char[]);
void receive_ack();
int main()

{
int i;

pthread_t thread1, thread2;

    char dest1[18] = "00:1B:10:00:2A:EC";
    send_message_function(dest1);


}

void send_message_function(char ptr[18])
{
 //printf("MAC::%s",ptr);
struct sockaddr_l2 addr = { 0 };
int s, stat, status, i;

char dest[18], buf[1024];
int bytes_read;

strncpy(dest, ptr, 18);

// allocate a socket
s = socket(AF_BLUETOOTH, SOCK_SEQPACKET, BTPROTO_L2CAP);

// set the connection parameters (who to connect to)
addr.l2_family = AF_BLUETOOTH;
addr.l2_psm = htobs(0x1001);
str2ba(dest, &addr.l2_bdaddr);

status = connect(s, (struct sockaddr *) &addr, sizeof(addr));
if (status == 0) {
    stat = write(s, "hello!", 6);

    bytes_read = read(s, buf, sizeof(buf));
    if (bytes_read > 0) {
        printf("received %s\n", buf);
        bzero(buf, 16);
    }

}

if (status < 0)
    perror("uh oh");
close(s);

}

master.c

#include <stdio.h>
#include <string.h>
#include <sys/socket.h>
#include <bluetooth/bluetooth.h>
#include <bluetooth/l2cap.h>
void send_ack(char[]);
int main(int argc, char **argv) {

struct sockaddr_l2 loc_addr = { 0 }, rem_addr = { 0 };
char buf[1024] = { 0 };
int s, client, bytes_read,status;
socklen_t opt = sizeof(rem_addr);
// allocate socket
s = socket(AF_BLUETOOTH, SOCK_SEQPACKET, BTPROTO_L2CAP);
// bind socket to port 0x1001 of the first available
// bluetooth adapter
loc_addr.l2_family = AF_BLUETOOTH;
loc_addr.l2_bdaddr = *BDADDR_ANY;
loc_addr.l2_psm = htobs(0x1001);
bind(s, (struct sockaddr *) &loc_addr, sizeof(loc_addr));
// put socket into listening mode
listen(s, 1);
while(1){
client = accept(s, (struct sockaddr *) &rem_addr, &opt);
memset(buf, 0, sizeof(buf));
// accept one connection

// read data from the client
bytes_read = read(client, buf, sizeof(buf));
if (bytes_read > 0) {
    printf("received [%s]\n", buf);
    status = write(client, "acknowledgement!", 16);
}

    //ba2str(&rem_addr.l2_bdaddr, buf);
    //send_ack(buf);
}
close(client);
close(s);
}

0 个答案:

没有答案