- 論壇徽章:
- 0
|
客戶端代碼:
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);//接收服務器發(fā)來的信息
write(1, temp, strlen(temp));
if (read_len < 0)
{
printf("read user error\n" ;
break;
}
if (strcmp(temp, "end" == 0)//接收到end字符串結(jié)束程序
{
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里的信息發(fā)到客戶端
{
write(fd, "賬號:", 7);
write(fd, row[0], strlen(row[0]));
write(fd, "\t用戶名:", 11);
write(fd, row[1], strlen(row[1]));
write(fd, "\t狀態(tài):", ;
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)//數(shù)據(jù)庫信息發(fā)送完畢,給客戶端發(fā)送end字符串
{
perror("write alluser end \n" ;
return -1;
}
return 0;
}
到最后服務器把數(shù)據(jù)庫中信息發(fā)送完畢后然后發(fā)送end字符串,客戶端接收到end字符串后跳出while(1)循環(huán)運行下一個程序,運行結(jié)構(gòu)是能輸出end字符串,但是還是一直在等待,而且ctrl+c客戶端后,服務器端會一直顯示"write alluser end 。。。。。。,但是這個并沒有循環(huán)啊,在線等大牛解答 |
|