⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 topology3_s2.c

📁 主要用于无线传感网络的编写的书籍.对于初学者有着很大的用处
💻 C
字号:
#include "../layers/physical/serial_connect.h"#include "../debug/debug.h"#include "../layers/network/packet.h"#include <stdio.h>   /* Standard input/output definitions */#include <string.h>  /* String function definitions */#include <unistd.h>  /* UNIX standard function definitions */#include <fcntl.h>   /* File control definitions */#include <errno.h>   /* Error number definitions */#include <termios.h> /* POSIX terminal control definitions */#include <sys/types.h>#include <sys/socket.h>#include <netinet/in.h>#include <netdb.h>#include <pthread.h>/******************************************************************* * argv[1] is the serial port,  run this program like: * ptest /dev/tts/2 *******************************************************************/#define MICA1_BAUDRATE B19200		/* MICA1 baudrate */#define MICA2_BAUDRATE B57600		/* MICA2 baudrate */#define DEFAULT_BAUDRATE B57600		/* Default is MICA2 */char *serial_port;int sfd,flag=0;char mote = 2;int sockfd, portno;struct sockaddr_in serv_addr;struct hostent *server;/* Open serial channel to mote */ void open_serial() {  struct termios tio;  sfd = open(serial_port, O_RDWR|O_NOCTTY);  if (sfd < 0) {    fprintf(stderr,"Cannot open serial device %s\n", serial_port);    exit(-1);  }  /* Serial port setting */  bzero(&tio, sizeof(tio));  tio.c_iflag &= ~(IGNPAR | BRKINT | PARMRK | ISTRIP                    | INLCR | IGNCR | ICRNL | IXON);    tio.c_cflag &= ~(CSIZE | PARENB);  if (mote == 1)    tio.c_cflag |= MICA1_BAUDRATE | CS8 | CLOCAL | CREAD;  else if (mote == 2)    tio.c_cflag |= MICA2_BAUDRATE | CS8 | CLOCAL | CREAD;  else    tio.c_cflag |= DEFAULT_BAUDRATE | CS8 | CLOCAL | CREAD;  /* Raw output_file */  tio.c_oflag &= ~OPOST;  tio.c_lflag &= ~(ECHO|ECHONL|ICANON|ISIG|IEXTEN);    /* Flush buffer; parameters take effect immediately */  tcflush(sfd, TCIFLUSH);  tcsetattr(sfd, TCSANOW, &tio);  /* Enable non-blocking IO */  fcntl(sfd, F_SETFL, O_NONBLOCK);}/* Display error messages */void error(char *msg){    perror(msg);    exit(0);}/* The server thread which listen to any packet recieved by WiFi card *//* The server IP Address is assumed to be : 10.1.1.3                  *//* The server port number is : 8888                                   */void *server_thread(void *t){     int sockfd, newsockfd, portno, clilen;     struct sockaddr_in serv_addr, cli_addr;     int n,i;     networkPkt p,p1;          sockfd = socket(AF_INET, SOCK_STREAM, 0);     if (sockfd < 0)         error("ERROR opening socket");     bzero((char *) &serv_addr, sizeof(serv_addr));     portno = 8888;     serv_addr.sin_family = AF_INET;     serv_addr.sin_addr.s_addr = INADDR_ANY;     serv_addr.sin_port = htons(portno);     if (bind(sockfd, (struct sockaddr *) &serv_addr,              sizeof(serv_addr)) < 0)               error("ERROR on binding");     listen(sockfd,5);     clilen = sizeof(cli_addr);     newsockfd = accept(sockfd,                  (struct sockaddr *) &cli_addr,                  &clilen);     if (newsockfd < 0)           error("ERROR on accept");     while(1)       {     n = read(newsockfd,&p,sizeof(p));     if (n < 0) error("ERROR reading from socket");     else if(n > 0)       {     p1.hdr.address = p.hdr.address;     p1.hdr.port = p.hdr.port;     p1.hdr.group = p.hdr.group;     p1.hdr.length = p.hdr.length;     p1.data[0] = p.data[0];     p1.data[1] = p.data[1];     p1.data[2] = p.data[2];     p1.data[3] = p.data[3];     p1.data[4] = p.data[4];     p1.data[5] = p.data[5];     p1.data[6] = p.data[6];     p1.data[7] = p.data[7];     p1.data[8] = p.data[8];     if (writeNetworkPkt(sfd, &p1) != SUCCESS) {    }    else {        printf("Packet get from Stargate through WiFi as follows:\n");    printf("The message is:\n");    printPacket(DBG_USR, CRITICAL, stdout, &p1);           }       }     }    pthread_exit(NULL);}int main(int argc, char *argv[]) {  //int sfd;  networkPkt p;  frame f;  int insync = 0;  char temp = '\0';  int i;  int rc,t=0;  pthread_t threads;   setupDebug(DBG_ALL, CRITICAL);  serial_port=argv[1];  open_serial();// run the server thread   rc = pthread_create(&threads, NULL, server_thread, (void *)t);   if (rc){           printf("ERROR; return code from pthread_create() is %d\n", rc);           exit(-1);  	 }  while(1)  // wait for any packet recieved by the serial port via the radio channel of mote  {      if (readNetworkPkt(sfd, &p) != SUCCESS)      {       printf("COULD NOT READ PACKET!!!!\n");     }     else      {	   printf("From stargate serial with IP 10.1.1.3:\n");	   printf("The message is:\n");           printPacket(DBG_USR, CRITICAL, stdout, &p);     }  }     closeSerialPort(sfd);  return 0;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -