1. 前面socket很简单,和以前做过的一样。只要走server:socket-->bind-->listening-->accept-->read,write&recv,send
client: socket-->connect-->read,write&recv,send
2.client端的线程表示:
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);
3.int myarg_one = 1; 是进入线程的标志
int myarg_two = 2;
thread_recvdata (void *arg) /*线程内*/
{
...
...
pthread_mutex_lock (&mutex1); /* 加互斥锁*/
...
...
if (*(int *) arg == 1) 执行线程1
{
..........
}
if (*(int *) arg == 2) 执行线程2
{
..........
}
pthread_mutex_unlock (&mutex1); 解锁
4.数据用结构体定义 这样存在一个连续内存空间,收和发都是这个结构体,比较省事。但是也有弊端,就是大小端问题,暂时忽略吧。
5 server端:
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];
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_close(conn);
6。最后是编译的方法,不会写makefile,先凑乎来
export LD_LIBRARY_PATH=/usr/local/mysql/lib/mysql/
gcc server.c -I/usr/local/mysql/include/mysql/ -L/usr/local/mysql/lib/mysql -lmysqlclient -w