socket通訊+資料寫入資料庫 程式碼

來源:互聯網
上載者:User

 /*******************************     client             **************************/
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <math.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/socket.h>
#include <fcntl.h>
#include <netinet/in.h>
#include <pthread.h>
#include <sys/socket.h>

#define MAX_LEN 1024*10
#define PATH "./recvdata.txt"
#define PORT 5678
#define REMOTE_IP "127.0.0.1"

pthread_mutex_t mutex1 = PTHREAD_MUTEX_INITIALIZER;

int myarg_one = 1;
int myarg_two = 2;
int s;

struct dataPack_t
{
  float data;
   int time;
};
struct dataPack_t dataPack[12];

double
makedata ()
{
  int i;
  double randnum;
  time_t t;
  srand ((unsigned) time (NULL));
  randnum = 5 + (pow (-1, rand ()) * (rand () / (double) (RAND_MAX)));
return randnum;
}

void *
thread_recvdata (void *arg)
{
  int i, err;
  FILE *fp;
  int len = MAX_LEN;
  char sendbuf[MAX_LEN];
  pthread_mutex_lock (&mutex1);
  if (*(int *) arg == 1)
    {
      fp=fopen(PATH,"wb");
      if (fp == NULL)
        {
          perror ("open error!");
          exit (1);
        }
      for (i = 0; i < 12; i++)
        {
          sleep (1);
          dataPack[i].data = makedata ();
          err = fprintf (fp,"%f/n",dataPack[i].data);
          if(err== -1)
          {
                perror("wrire data");
                exit(1);
          }
          dataPack[i].time = time ((time_t *) NULL);
          err = fprintf (fp,"%d/n",dataPack[i].time);
          if(err == -1)
          {
                perror("write time");
                exit(1);
          }
          printf ("%f/n", dataPack[i].data);
          printf("%d/n/n",dataPack[i].time);
        }
        if(send(s,dataPack,sizeof(dataPack),0) == -1)
        {
               perror("send error");
        }
        close (fp);
    }
  if (*(int *) arg == 2)
    {
      FILE *fp;
      fp = fopen (PATH, "w");
      close (fp);
    }
  pthread_mutex_unlock (&mutex1);
}

int
main (int argc, char **argv)
{
  pthread_t thread_one, thread_two;
  struct sockaddr_in servaddr;
  int len = MAX_LEN;
  int sendbuf[MAX_LEN];
  if ((s = socket (AF_INET, SOCK_STREAM, 0)) == -1)
    {
      perror ("sock");
      exit (1);
    }
  else
    {
      printf ("socket created/n");
      printf ("socket id %d/n", s);
    }
  bzero (&servaddr, sizeof (servaddr));
  servaddr.sin_family = AF_INET;
  servaddr.sin_port = htons (PORT);
  servaddr.sin_addr.s_addr = inet_addr (REMOTE_IP);
  if (connect (s, &servaddr, sizeof (servaddr)) < 0)
    {
      perror ("connect error");
     exit (1);
    }
  else
    {
      printf ("connected ok!/n");
      printf ("remote ip:%s/n,REMOTE IP");
      printf ("remote port %d/n", PORT);
    }
  recv (s, sendbuf, sizeof (sendbuf), 0);
  printf ("%s/n", sendbuf);

 

  if (0 != pthread_create (&thread_one, NULL, thread_recvdata, &myarg_one))
    {
      printf ("pthread create failed!/n");
      return -1;
    }
  if (0 != pthread_create (&thread_two, NULL, thread_recvdata, &myarg_two))
    {
      printf ("pthread create failed!/n");
      return -1;
    }
  pthread_join (thread_one, NULL);
  pthread_join (thread_two, NULL);
  return 0;
}

 

 

 

 

/******************************SERVER******************************/
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <math.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/socket.h>
#include <fcntl.h>
#include <netinet/in.h>
#include <pthread.h>
#include <sys/socket.h>
#include "pthread.h"
#include "errno.h"
#include "mysql.h"

#define BACKLOG 3
#define MAX_LEN 1024*10
#define PORT 5678

int len = MAX_LEN;

struct dataPack_t
{
        float data;
         int time;
};
struct dataPack_t dataPack[12];

int main(int argc,char **argv)
{
        int len;
        int connfd;
        int sockfd;
        int newsockfd;
        struct sockaddr_in servaddr;
        int servaddr_len = sizeof(struct sockaddr_in);
        char msg[]="This is the message from server.Connected./n/n";
        if ((sockfd = socket(AF_INET,SOCK_STREAM,0))<0)

        {
                perror("socket");
                exit(1);
        }
        else
        {
                printf("socket created ./n");
                printf("socket id: %d /n",sockfd);
         }
        bzero(&servaddr,sizeof(servaddr));
        servaddr.sin_family=AF_INET;
        servaddr.sin_port=htons(PORT);
        servaddr.sin_addr.s_addr =htonl(INADDR_ANY);

        if(bind(sockfd,(struct sockaddr *)&servaddr,sizeof(servaddr))<0)
        {
                perror("connect");
                exit(1);
        }
        else
        {
                printf("connect./n");
                printf("local port %d/n",PORT);
        }

        if(listen(sockfd,BACKLOG)<0)
        {
                perror("listen");
                exit(1);
        }
        else
        {
                printf("listening....../n");
        }
        while(1)
        {
            if((newsockfd = accept(sockfd,&servaddr,&servaddr_len)) == -1)
            {
               perror("accept");
            }
            write(newsockfd,msg,sizeof(msg));
            printf("cnnect from %s/n",inet_ntoa(servaddr.sin_addr));
            if(!fork())
            {
                while(1)
                {
                        int err;
                        err=recv(newsockfd,dataPack,sizeof(dataPack),0);
                        if(err < 0)
                        {
                                perror("recv error");
                                exit(1);
                        }
                        int i;
                        for(i=0;i<12;i++)
                        {
                                printf("%f/n",dataPack[i].data);
                                printf("%d/n",dataPack[i].time);
                        }
                        break;
                }
                MYSQL *conn;
                conn=mysql_init(NULL);
                mysql_real_connect(conn,"localhost.localdomain","root","123456","monitor",0,NULL,0);
                int j;
                char command[50];
                for(j=0;j<12;j++)
                {
                        time_t tt;
                        struct tm *ttime;
                        char str[30]={'/0'};
                        tt = dataPack[j].time;
                        ttime = localtime(&tt);
                        strftime(str,30,"%Y-%m-%d %H:%M:%S",ttime);
                        sprintf(command,"insert into data (mdata,mtime) values(%f,'%s')",dataPack[j].data,str);
                        mysql_query(conn,command);
                }
                        mysql_query(conn,command);
                }
                mysql_close(conn);
                exit(1);
            }
        }
    return 0;
}

 

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.