免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2407 | 回复: 2
打印 上一主题 下一主题

服务器端查询数据库内容发送到客户端,客户端接收不能正常退出 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-06-14 08:59 |只看该作者 |倒序浏览
客户端代码:
int recv_alluser(int fd)
{
        printf("---------------------好友列表--------------------\n\n";
        int read_len = 0;

        while (1)
        {
                char temp[MAX];
                memset(temp, 0, MAX);
//                sleep(1);
                read_len = read(fd, temp, MAX);//接收服务器发来的信息
                write(1, temp, strlen(temp));
                if (read_len < 0)
                {
                        printf("read user error\n";
                        break;
                }
                if (strcmp(temp, "end" == 0)//接收到end字符串结束程序
                {
                        return 0;
                }
        }
        return 0;
}

服务器端代码:
int send_alluser(int fd)
{
        if (mysql_query(conn, "select * from user" != 0)
        {
                printf("mysql query alluser error %u:%s\n",mysql_errno(conn), mysql_error(conn));
                if (write(fd, "", 0) < 0)
                {
                        perror("write 0 error\n";
                        return -1;
                }

                return -1;
        }

        MYSQL_RES *result = mysql_store_result(conn);
        if (result == NULL)
        {
                printf("mysql query alluser result error %u:%s\n",mysql_errno(conn), mysql_error(conn));
                return -1;
        }
        MYSQL_ROW row;
        while ((row = mysql_fetch_row(result)))//把result里的信息发到客户端
        {
                write(fd, "账号:", 7);
                write(fd, row[0], strlen(row[0]));
                write(fd, "\t用户名:", 11);
                write(fd, row[1], strlen(row[1]));
                write(fd, "\t状态:", ;
                write(fd, row[4], strlen(row[4]));
                write(fd, "\n", 1);       
        }
        mysql_free_result(result);
        char buf[10] = "end";
        if(write(fd, buf, 10) <= 0)//数据库信息发送完毕,给客户端发送end字符串
        {
                perror("write alluser end \n";
                return -1;
        }
        return 0;

}

到最后服务器把数据库中信息发送完毕后然后发送end字符串,客户端接收到end字符串后跳出while(1)循环运行下一个程序,运行结构是能输出end字符串,但是还是一直在等待,而且ctrl+c客户端后,服务器端会一直显示"write alluser end 。。。。。。,但是这个并没有循环啊,在线等大牛解答

论坛徽章:
0
2 [报告]
发表于 2014-06-15 00:20 |只看该作者

                if (strcmp(temp, "end" == 0)//接收到end字符串结束程序
                {
                        return 0;
                }

没看到这里有能退出的语句

论坛徽章:
0
3 [报告]
发表于 2014-06-15 00:21 |只看该作者
这里是网络版块。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP