#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include //#include #include #include #define MAXDIM 2048 #define BLUE //#undef BLUE int bluetooth_initserver_socket(int channel) { struct sockaddr_rc server; bdaddr_t bdaddr; int s; /* Default options */ if ((s = socket(PF_BLUETOOTH, SOCK_STREAM, BTPROTO_RFCOMM)) < 0) { printf("Can't create socket. %s(%d)\n", strerror(errno), errno); exit(1); } memset(&server, 0, sizeof(server)); server.rc_family = AF_BLUETOOTH; bacpy(&bdaddr, BDADDR_ANY); server.rc_bdaddr = bdaddr; server.rc_channel = htobs(channel);//channel; printf("Binding...\n"); if (bind(s, (struct sockaddr *) &server, sizeof(server)) < 0) { printf("Can't bind socket. %s(%d)\n", strerror(errno), errno); exit(1); } printf("Bounded on channel %d\n", server.rc_channel); return s; } int tcp_initserver_socket(int port) { struct sockaddr_in server; int s; if ((s = socket(AF_INET, SOCK_STREAM, 0)) < 0) { printf("Can't create socket. %s(%d)\n", strerror (errno), errno); exit(1); } memset(&server, 0, sizeof(server)); server.sin_family = AF_INET; server.sin_addr.s_addr = INADDR_ANY; server.sin_port = htons(port); printf("Binding...\n"); if (bind(s, (struct sockaddr *) &server, sizeof(server)) < 0) { printf("Can't bind socket.%s(%d)\n", strerror (errno), errno); exit(1); } printf("Bounded on port %d\n", port); return s; } int main(int argc, char *argv[]) { //struct sockaddr_in clientAddr; int clientDescr, s, i; socklen_t clientAddrLen; #ifdef BLUE struct sockaddr_rc clientAddr; #else struct sockaddr_in clientAddr; #endif #ifdef BLUE s = bluetooth_initserver_socket(10); #else s = tcp_initserver_socket(2004); #endif if (listen(s, 5) < 0) { //Error printf("Error in listen (%d)\n", strerror(errno), errno); exit(1); } printf("Listenning...\n"); //Accept a connection memset(&clientAddr, 0, sizeof(clientAddr)); if ((clientDescr = accept(s, (struct sockaddr *) &clientAddr, &clientAddrLen)) < 0){ printf("accept failed %s (%d)\n", strerror(errno), errno); exit(1); } printf("accept ok\n"); char *buffer; buffer = malloc(MAXDIM); for (i = 0; i < MAXDIM; i++) buffer[i] = MAXDIM - i; //Sends 5 packets of MAXDIM bytes for (i = 0; i < 5; i++){ printf("loop %d\n", i); if (write(clientDescr, buffer, MAXDIM) < 0){ printf("Error during write\n"); return; } } close (clientDescr); }