C语言聊天室1.0

本文介绍了一个使用C语言编写的简单聊天室应用。该应用包括服务器端和客户端,支持用户注册、登录、退出、显示在线好友、私聊、群聊等功能。服务器端通过SQLite数据库管理用户信息和在线状态,客户端通过TCP连接与服务器交互。用户可以发送消息给在线好友或所有在线用户,实现基本的聊天功能。
摘要由CSDN通过智能技术生成

1        先运行server.c的代码,可以在服务器中查看已经注册的账户信息。

2        接着运行client.c代码,运行后有注册、登陆和退出功能。注册是注册账号;登陆是登陆账号;退出是退出客户端。

3        登陆之后有四个功能,分别是显示在线好友、和好友聊天、群聊和退出账号。点击和好友聊天后,出现输入好友姓名(好友必须在线),然后可以发消息给对方。当输入”exit”时可退出聊天,返回上一级。点击群聊后,直接输入想发送的消息,可发给所有在线用户。

4          每当一个用户上线或者下线后,所有在线用户都能收到相应提示。

server.c:

 

#include<stdio.h>

#include<sqlite3.h>

#include<stdlib.h>

#include<string.h>

#include<netdb.h>

#include<sys/types.h>

#include<netinet/in.h>

#include<sys/socket.h>

 

#definePORT 10000

 

staticchar *errmsg = NULL;

staticchar **Result = NULL;

staticsqlite3_stmt *stmt = NULL;

sqlite3*db = NULL;

int fd_client[20] = {0};     //存储socket套接字

 

void Sendtoall(char msg[],int sockfd);   //msg是要发的信息

void up_down_line(int fd,char msg[]);  //fd是客户端的socket

 

//创建数据库和两个表,一个存放用户信息(register),一个在线信息(online)。

voidCreateDb()

{

    int rc;

 

    rc =sqlite3_open("chattingroom.db",&db);

    rc = sqlite3_exec(db,"create tableregister(name,code)",0,0,&errmsg);

    rc = sqlite3_exec(db,"create tablechat(msg)",0,0,&errmsg);

    rc = sqlite3_exec(db,"create tableonline(fd integer,name)",0,0,&errmsg);

    if(rc != 0)

    {

        printf("create db error!\n");

        exit(1);

    }

}

 

//显示已注册的帐号

voidAccountNumber()

{

    int rc;

    int i,j,nrow,ncolumn;

 

    rc =sqlite3_open("chattingroom.db",&db);

    rc = sqlite3_get_table(db,"select*from register",&Result,&nrow,&ncolumn,&errmsg);

 

    if(rc != 0)

    {

        printf("display error!\n");

        exit(1);

    }

    else

    {

        for(i = 1; i <= nrow; i++)

        {

            for(j = 0; j < ncolumn ;j++)

            {

               printf("%s|",Result[i*ncolumn + j]);

            }

            printf("\n");

        }

    }

    sqlite3_free_table(Result);

    sqlite3_close(db);

}

 

//清空数据库中表online(在线人信息)

voidonline_clear()

{

    int rc;

 

    rc =sqlite3_open("chattingroom.db",&db);

    if(rc != 0)

    {

        printf("open db error!\n");

        exit(1);

    }

    rc = sqlite3_exec(db,"delete fromonline",0,0,&errmsg);

    if(rc != 0)

    {

        printf("delete onlineerror!\n");

        exit(1);

    }

    sqlite3_close(db);

}

 

//读出客户端要连的id,并读出信息发给它

void *read_msg(void *arg)

{

    char buf[100];          //接受客户端发来的内容,包括指令

    //char down_msg[50];    //存储下线信息

    int sockfd = *((int*)arg);   //客户端的ID

    int new_sockfd;      //新客户端ID

    int types_read = 0;

    int i,flag = 1;

    char up_msg[] = "is on line!";

    char down_msg[] = "is on offline!";

 

   up_down_line(sockfd,up_msg);                          //发送上线通知

    while(1 == flag)

    {

       read(sockfd,buf,sizeof(buf));   //读客户端登录上去后的指令

        if(strcmp(buf,"0") == 0)

        { </

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值