/******************************* 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;
}