服务器将select查询出来的数据直接向客户端发送,怎么改?

leihelin5201314 2010-08-18 10:38:22
#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 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);
//bzero(&servaddr,sizeof(servaddr));
sockfd=socket(AF_INET,SOCK_STREAM,0);
bind(sockfd,(struct sockaddr *)&servaddr,sizeof(servaddr));
listen(sockfd,20);
printf("aaaaaaaaaaaaaa\n");

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 limit 1";
//scanf("%s",str1);
strcat(str,Where_SQL);
//strcat(str,str1);
//sprintf(age,"SELECT * FROM domains where id = %s;");
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;
}
char buf[500];
clilen = sizeof(cliaddr);
clifd=accept(sockfd,(struct sockaddr *)&cliaddr,&clilen);
while((row=mysql_fetch_row(result))!= NULL) /*fetching each row*/
{
memset(buf,0,500);
//printf("%s\n",row);
buf[5000]=result; //92行
if(clifd < 0)
{
printf("cccccccccccccccccccccc\n");
continue;
}
else
{
send(clifd,buf,strlen(buf),0);
memset(buf,0,500);
recv(clifd,buf,500,0);
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("================================================");
//printf("recv[%s]\n",row);
}
// close(clifd);
}
close(sockfd);
return 0;
}


错误提示:3s.c: In function ‘main’:
3s.c:92: warning: assignment makes integer from pointer without a cast
92行我已经在代码中标出,而且数据根本传送不出来,该怎么改?谢谢!
linux下,数据库mysql
...全文
110 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
wwwunix 2010-08-18
  • 打赏
  • 举报
回复
1、你应该先accept()再到mysql中做查询:也就是要等到client连上来后,再做查询和发送。
2、你如果要将整个MYSQL_RES结构都发送到client端,可以将92行去掉,然后send(clifd,result,sizeof(result),0);
yzx714 2010-08-18
  • 打赏
  • 举报
回复
对网络编程不了解,帮顶个

23,120

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧