ESP8266--Linux-TCPServer-MySQL

来源:互联网 发布:1064 mysql 编辑:程序博客网 时间:2024/06/05 16:17

 利用ESP8266将数据上传到Linux服务器上面。

  • 在电脑上用串口传输数据到ESP8266
  • ESP8266在station模式下配置成TCP-Client模式
  • CentOS服务器上运行一个TCP-Server程序
  • 服务器上运行的TCP-Server程序已经配置好数据库连接
  • ESP8266使用TCP将数据传输到服务器上
  • TCP服务器将数据插入数据库

程序结构图

这里写图片描述


ESP8266部分:

  • 接收电脑从串口传来的数据
  • 将传来的数据通过TCPServer传输到指定IP的指定端口
  • 服务器端要有一个TCPserver测试程序

Linux TCPServer部分:

  • 显示TCP传输过来的信息
  • 显示客户端,端口号
  • 回复客户端当前时间

运行时在运行文件后面加端口号!./tcp 8080

/*******************服务器端程序*****************/#include <stdio.h>#include <stdlib.h>#include <errno.h>#include <string.h>#include <netdb.h>#include <time.h>#define MAXDATASIZE 128int sockfd;void do_service(fd)/*返回一个时间给客户端*/{    long t = time(0);    char *s = ctime(&t);    int num;    char recvbuf[MAXDATASIZE];    num = recv(fd,recvbuf,MAXDATASIZE,0);/*获取信息*/    printf("num = %d\n %s\n",num,recvbuf);    write(fd,s,strlen(s));/*返回时间给客户端*/}void out_client(struct sockaddr_in clientaddr)/*在服务器端显示一个客户端的IP地址和端口号*/{    char buffer[16];    inet_ntop(AF_INET,&clientaddr.sin_addr.s_addr,buffer,sizeof(clientaddr));    unsigned short port = ntohs(clientaddr.sin_port);    printf("client ip:%s (%d)\n",buffer,port);/*显示客户端的IP和端口号*/}int main(int argc,char *argv[]){    if(argc < 2)    {        fprintf(stderr,"usage: %s port\n",argv[0]);        exit(1);    }    /*create socket*/    sockfd = socket(AF_INET,SOCK_STREAM,0);    if(sockfd < 0)    {        fprintf(stderr,"socket: %s\n",strerror(errno));        exit(1);    }    /*set ip and port*/    struct sockaddr_in addr;    memset(&addr,0,sizeof(addr));    addr.sin_family = AF_INET;    addr.sin_port = htons(atoi(argv[1]));    addr.sin_addr.s_addr = INADDR_ANY;     /*bind ip and port*/    int len = sizeof(addr);    if(bind(sockfd,(struct sockaddr*)&addr,len) < 0)    {        fprintf(stderr,"bind: %s\n",strerror(errno));        exit(1);    }    /*begin to listen*/    if(listen(sockfd,10) < 0)    {        fprintf(stderr,"listen: %s\n",strerror(errno));        exit(1);    }    while(1)    {        struct sockaddr_in clientaddr;        int c_len = sizeof(clientaddr);        int fd = accept(sockfd,(struct sockaddr*)&clientaddr,&c_len);        if(fd < 0)        {            fprintf(stderr,"accept: %s\n",strerror(errno));            continue;        }        out_client(clientaddr);        do_service(fd);        close(fd);    }    return 0;}
1 0