#include<stdio.h>
#include<sys/socket.h>
#include<sys/types.h>
#include<arpa/inet.h>
#include <unistd.h>
#include<fcntl.h>
#include<string.h>
#include <stdlib.h>
#include <mysql/mysql.h>
#include <syslog.h>
#define num 2048
#define IPADDR "127.0.0.1"
#define PORT 21234
const char *logpath = "./log";
int main()
{
struct sockaddr_in servaddr,cliaddr;
int sockfd,clifd,logfd;
socklen_t clilen;
servaddr.sin_family = AF_INET;
servaddr.sin_port = htons(PORT);
servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
sockfd=socket(AF_INET,SOCK_STREAM,0);
bind(sockfd,(struct sockaddr *)&servaddr,sizeof(servaddr));
listen(sockfd,20);
printf("aaaaaaaaaaaaaa\n"); char buf[500];
clilen = sizeof(cliaddr);
clifd=accept(sockfd,(struct sockaddr *)&cliaddr,&clilen);
MYSQL db;/*connector*/
MYSQL_RES * result;/*result buffer*/
MYSQL_ROW row;/*one row of the result*/
int i;
/*初始化mysql*/
if(mysql_init(&db)==NULL)
{
fprintf(stderr,"Fail to initialize the db.\n");
return -1;
}
/*连接数据库*/
char host[32] = "localhost";
char user[32] = "root";
char passwd[38] = "123456";
char dbc[32] = "mysql";
char getDate[1024];
char id[2000];
char s[2000];
memset(getDate,0,1024);
if (NULL == (mysql_real_connect(&db,host,user,passwd,dbc,0,NULL,0)))
{
fprintf(stderr,"Connect to mysql Error:%s!",mysql_error(&db));
return -1;
}
char str[2000];char str1[2000];
char Where_SQL[]="SELECT d.user_id,u.email,d.domain,d.status,v.* FROM domain_vip_status AS v, domains AS d, users AS u WHERE d.id = v.domain_id AND u.id = d.user_id AND d.grade != 'Free' ORDER BY vip_ended_at, email";
strcat(str,Where_SQL);
if(mysql_query(&db,str)!= 0)
{
fprintf(stderr,"Fail to query the db for information.\n");
return -1;
}
if ((result = mysql_store_result(&db)) == NULL)
{
fprintf(stderr,"Fail to get the result.\n");
return -1;
}
while((row=mysql_fetch_row(result))!= NULL)
{
puts("================================================");
printf("user_id: %s\n",row[0]);
printf("email: %s\n",row[1]);
printf("domain: %s\n",row[2]);
printf("status: %s\n",row[3]);
printf("domain_id: %s\n",row[4]);
printf("vip_started_at: %s\n",row[5]);
printf("vip_ended_at: %s\n",row[6]);
puts("================================================"); char m1[]=" user_id:";char m2[]=" email:";char m3[]=" domain:";char m4[]=" status:";char m5[]=" domain_id:";char m6[]=" vip_started_at:";char m7[]=" vip_ended_at:";
memset(buf,0,500);
sprintf(buf,"%s%s\n%s%s\n%s%s\n%s%s\n%s%s\n%s%s\n%s%s\n",m1,row[0],m2,row[1],m3,row[2],m4,row[3],m5,row[4],m6,row[5],m7,row[6]);
printf("%s\n",buf);
if(clifd < 0)
{ printf("cccccccccccccccccccccc\n");
continue; }
else
{
send(clifd,buf,500,0);
memset(buf,0,500);
recv(clifd,buf,500,0);
printf("recv[%s]\n",buf);
}
}
close(sockfd);
return 0;
}数据库查询出来的数据过于庞大,客户端担心死机,而且这么大的数据也不好用,需要将select出来的几十万条数据分段发送,请问各位我该怎么改?
需要设定分段发送的间隔时间吗?怎么设定?
#include<sys/socket.h>
#include<sys/types.h>
#include<arpa/inet.h>
#include <unistd.h>
#include<fcntl.h>
#include<string.h>
#include <stdlib.h>
#include <mysql/mysql.h>
#include <syslog.h>
#define num 2048
#define IPADDR "127.0.0.1"
#define PORT 21234
const char *logpath = "./log";
int main()
{
struct sockaddr_in servaddr,cliaddr;
int sockfd,clifd,logfd;
socklen_t clilen;
servaddr.sin_family = AF_INET;
servaddr.sin_port = htons(PORT);
servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
sockfd=socket(AF_INET,SOCK_STREAM,0);
bind(sockfd,(struct sockaddr *)&servaddr,sizeof(servaddr));
listen(sockfd,20);
printf("aaaaaaaaaaaaaa\n"); char buf[500];
clilen = sizeof(cliaddr);
clifd=accept(sockfd,(struct sockaddr *)&cliaddr,&clilen);
MYSQL db;/*connector*/
MYSQL_RES * result;/*result buffer*/
MYSQL_ROW row;/*one row of the result*/
int i;
/*初始化mysql*/
if(mysql_init(&db)==NULL)
{
fprintf(stderr,"Fail to initialize the db.\n");
return -1;
}
/*连接数据库*/
char host[32] = "localhost";
char user[32] = "root";
char passwd[38] = "123456";
char dbc[32] = "mysql";
char getDate[1024];
char id[2000];
char s[2000];
memset(getDate,0,1024);
if (NULL == (mysql_real_connect(&db,host,user,passwd,dbc,0,NULL,0)))
{
fprintf(stderr,"Connect to mysql Error:%s!",mysql_error(&db));
return -1;
}
char str[2000];char str1[2000];
char Where_SQL[]="SELECT d.user_id,u.email,d.domain,d.status,v.* FROM domain_vip_status AS v, domains AS d, users AS u WHERE d.id = v.domain_id AND u.id = d.user_id AND d.grade != 'Free' ORDER BY vip_ended_at, email";
strcat(str,Where_SQL);
if(mysql_query(&db,str)!= 0)
{
fprintf(stderr,"Fail to query the db for information.\n");
return -1;
}
if ((result = mysql_store_result(&db)) == NULL)
{
fprintf(stderr,"Fail to get the result.\n");
return -1;
}
while((row=mysql_fetch_row(result))!= NULL)
{
puts("================================================");
printf("user_id: %s\n",row[0]);
printf("email: %s\n",row[1]);
printf("domain: %s\n",row[2]);
printf("status: %s\n",row[3]);
printf("domain_id: %s\n",row[4]);
printf("vip_started_at: %s\n",row[5]);
printf("vip_ended_at: %s\n",row[6]);
puts("================================================"); char m1[]=" user_id:";char m2[]=" email:";char m3[]=" domain:";char m4[]=" status:";char m5[]=" domain_id:";char m6[]=" vip_started_at:";char m7[]=" vip_ended_at:";
memset(buf,0,500);
sprintf(buf,"%s%s\n%s%s\n%s%s\n%s%s\n%s%s\n%s%s\n%s%s\n",m1,row[0],m2,row[1],m3,row[2],m4,row[3],m5,row[4],m6,row[5],m7,row[6]);
printf("%s\n",buf);
if(clifd < 0)
{ printf("cccccccccccccccccccccc\n");
continue; }
else
{
send(clifd,buf,500,0);
memset(buf,0,500);
recv(clifd,buf,500,0);
printf("recv[%s]\n",buf);
}
}
close(sockfd);
return 0;
}数据库查询出来的数据过于庞大,客户端担心死机,而且这么大的数据也不好用,需要将select出来的几十万条数据分段发送,请问各位我该怎么改?
需要设定分段发送的间隔时间吗?怎么设定?
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货