在线电子词典(sqlite3/TCP/并发/root)

本文介绍了一个使用SQLite3数据库、TCP通信及并发处理的在线电子词典项目。实现了用户注册、登录、查询单词和历史记录等功能。通过服务器和客户端的交互,用户可以在多客户端环境下操作。

项目描述:

实现一个可以通过客户端,进行服务器交互,实现注册账号,登陆账号,查询单词,查询历史的功能。

项目实用技术:

1.使用sqlite3进行创建数据库,实现单词的查询记录和账户记录;

2.使用TCP网络通信,实现两台机器之间的联系;

3.使用并发,实现多个客户端登陆的功能;

项目图示分析:

功能实现

服务器

1.注册账号

static int do_register(int fd,sqlite3 *db, MSG *msg)
{
    printf("register ...\n");
    char sql[1024]={0};
    int ret;
    char *errmsg;
    sprintf(sql,"insert into usr values('%s',%s);",msg->name,msg->data);
    printf("%s\n",sql);
    ret = sqlite3_exec(db, sql,NULL,NULL,&errmsg);
    if(ret != 0)
    {
        printf("insert %s\n",errmsg);
        return -1;
    }else{
        printf("insert success\n");
        strcpy(msg->data,"OK");
        do{
            ret = send(fd, msg, sizeof(MSG), 0);
        }while(ret < 0);
        return 1;
    }
    return -1;
}

2.登录账号

static int do_login(int fd,sqlite3 *db,MSG *msg)
{
    printf("login ...\n");
    char sql[1024]={0};
    char **result; 
    int row;
    int ret;
    int column;          
    char *pzErrmsg;
    sprintf(sql,"select * from usr where name='%s' and pass=%s;",msg->name,msg->data);
    ret = sqlite3_get_table(db, sql, &result, &row, &column, &pzErrmsg);
    if(ret != 0)
    {
        printf("get_table %s\n",pzErrmsg);
        return -1;
    }
    if(row == 1)
    {
        printf("login success...\n");
        strcpy(msg->data,"OK");
        do{
        ret = send(fd, msg, sizeof(MSG),0);
        }while(ret < 0);
    }else{
        strcpy(msg->data,"NOT OK");
        do{
        ret = send(fd, msg, sizeof(MSG),0);
        }while(ret < 0);
        printf("login failed...\n");
    }
    return -1;
}

3.查询单词

static int do_searchword(char *word,int fd, sqlite3 *db, MSG *msg)
{
    FILE *fp;
    char temp[1024]={0};
    int len,ret;
    char *p;
    fp = fopen("dict.txt","r");
    if(fp == NULL)
    {
        perror("fopen");
        return -1;
    }
    int word_len = strlen(word);
    while(fgets(temp, 1024, fp) != NULL)
    {
        len = strncmp(temp, word, word_len);
        if(len < 0)
            continue;
        if((len > 0) || ((len == 0) && (temp[word_len] != ' ')))
            break;
        p = temp + len;
        while(*p == ' ')
            p++;
        strcpy(msg->data,p);
        printf("found:%s",msg->data);
        do{
            ret = send(fd, msg, sizeof(MSG), 0);
        }while(ret < 0);

        fclose(fp);
        return 1;
    }
    strcpy(msg->data,"not found");
    do{
        ret = send(fd, msg, sizeof(MSG), 0);
    }while(ret < 0);
    fclose(fp);
    return -1;
}

static char *do_time(int fd, sqlite3 *db, MSG *msg)
{
    static char sql[1024]={0};
    time_t te;
    struct tm *tt;
    time(&te);
    tt = localtime(&te);
    sprintf(sql,"%d/%d/%d %d:%d:%d",tt->tm_year+1900, tt->tm_mon, tt->tm_hour, tt->tm_mday, tt->tm_min, tt->tm_sec);
    return sql;
}
static int do_query(int fd,sqlite3 *db,MSG *msg)
{
    int ret = 0;
    char sql[1024]={0};
    char *errmsg;
    char word[64]={0};
    strcpy(word,msg->data);
    ret = do_searchword(word,fd, db, msg);
    if(ret == 1)
    {
        sprintf(sql,"insert into record values('%s','%s','%s');",msg->name,do_time(fd,db,msg),msg->data);
        ret = sqlite3_exec(db, sql,NULL,NULL,&errmsg);
        if(ret != 0)
        {
            printf("insert %s\n",errmsg);
            return -1;
        }else{
            printf("query success\n");
            return 1;
        }
    }
    return -1;
}

4.查询历史

static int do_history(int fd,sqlite3 *db,MSG *msg)
{
    char sql[1024]={0};
    char buf[1024]={0};
    int ret;
    char *pzErrmsg;
  

<think>首先,用户的问题是关于在阿里云CentOS 7.6系统上部署STUN/TURN的方法。用户提供了几个引用:[^1], [^2], [^3], [^4],这些引用是从站内引用的,我需要参考它们。 回顾引用内容: - 引用[^1]: 提到了如果wget无法获取turnserver,可以从本地下载并传输到阿里云CentOS系统。 - 引用[^2]: 解释了WebRTC使用TURN服务器进行NAT穿透,并提到coturn作为流行的STUN/TURN服务器。它给出了安装git的命令:`yum install git`。 - 引用[^3]: 描述了coturn服务器,并提到在虚拟机上搭建coturn服务的步骤,包括操作系统要求。 - 引用[^4]: 给出了启动turnserver的命令:`turnserver -v -r user -a -o -c /path/to/turnserver.conf`。 用户的上一个问题似乎是关于部署STUN/TURN服务器,但在这个查询中,用户明确说:“我想查找在阿里云CentOS 7.6系统上部署STUN/TURN的方法”。 系统指令要求: - 使用中文回答。 - 结构清晰,逐步解决问题。 - 回答中引用的段落末尾自然地添加引用标识。 - 生成相关问题。 - 所有行内数学表达式用$...$,独立公式用$$...$$。但由于主题是部署服务器,可能没有数学公式,所以我可以忽略这个,除非必要。 - LaTeX语法正确。 回答结构应该清晰,帮助用户逐步解决问题。参考用户提供的引用,coturn是一个流行的选择。 关键步骤从引用中提取: 1. 安装依赖:从[^2],安装git:`yum install git`。 2. 获取coturn源代码:从[^1],如果wget不行,就手动下载并上传。但通常可以直接下载。 3. 编译安装:引用中没有直接给出,但coturn通常需要编译。标准步骤是下载源代码,然后编译。 4. 配置:从[^4],有启动命令指定配置文件。 5. 启动服务:[^4]给出了命令。 我应该基于coturn的标准安装步骤来回答,因为coturn是推荐的STUN/TURN服务器。 标准部署coturn在CentOS上的步骤: - 确保系统更新。 - 安装依赖包。 - 下载coturn源代码。 - 编译并安装。 - 配置turnserver.conf文件。 - 启动服务。 参考用户引用: - [^1]: 强调了下载问题,如果wget失败,手动传输。 - [^2]: 提到安装git。 - [^3]: 提到操作系统要求,CentOS 7.6应该兼容。 - [^4]: 启动命令。 因此,我的回答应该整合这些。 完整步骤: 1. **准备系统**:更新系统并安装依赖。 - `sudo yum update -y` - 安装git:[^2] `sudo yum install git -y` - 安装其他依赖如gcc, make, libevent-devel等(标准coturn依赖)。 2. **下载coturn**: - 通常使用git或下载源码包。 - `git clone https://github.com/coturn/coturn` - 或从官网下载:[^1]提到如果wget失败,手动下载turnserver-4.5.0.8.tar.gz并上传。 3. **编译安装**: - 进入目录:`cd coturn` - `./configure` - `make` - `sudo make install` 4. **配置**: - 配置turnserver.conf文件。通常位于/etc/turnserver.conf或示例目录。 - 需要设置监听IP、端口、realm、用户凭据等。 - 引用[^4]提到了启动命令指定配置文件。 5. **启动服务**: - 使用命令如`turnserver -v -r user -a -o -c /etc/turnserver.conf` - 可以设置systemd服务以自动启动。 6. **测试部署**。 在回答中,引用相关部分末尾添加引用标识。 例如,当提到手动下载时,添加[^1];安装git时添加[^2];操作系统要求添加[^3];启动命令添加[^4]。 生成相关问题:在最后添加§§相关问题§§。 回答结构: - 开头介绍:简要说明部署STUN/TURN服务器的重要性,并聚焦于coturn。 - 步骤分解:逐步描述过程。 - 结尾:确认或建议测试。 使用中文确保所有内容。 </think>### 在阿里云CentOS 7.6系统上部署STUN/TURN服务器的方法 部署STUN/TURN服务器(如coturn)是实现WebRTC通信的关键步骤,用于解决NAT穿透问题。coturn是一个开源、符合RFC标准的服务器,支持STUN和TURN协议。您的阿里云CentOS 7.6系统兼容coturn部署。以下是详细的逐步方法,基于标准最佳实践和参考您的引用信息[^1][^2][^3][^4]。整个过程包括系统准备、安装coturn、配置文件和启动服务。确保您以root用户或sudo权限执行命令。 --- ### 步骤1: 系统准备和依赖安装 在部署前,更新系统并安装必要的依赖包。阿里云CentOS 7.6默认使用yum包管理器。 - 更新系统软件包: ```bash sudo yum update -y ``` - 安装编译依赖(如gcc、make等): ```bash sudo yum groupinstall "Development Tools" -y sudo yum install epel-release -y # 启用EPEL仓库 sudo yum install openssl-devel libevent-devel sqlite-devel -y ``` - 安装git(可选,用于下载源代码):从引用[^2]可知,git常用于获取coturn源码。 ```bash sudo yum install git -y # [^2] ``` 验证安装:`git --version` 应显示版本信息如 `git version 1.8.3.1`。 --- ### 步骤2: 下载coturn源代码 coturn可通过git或手动下载源码包获取。如果网络问题导致wget失败,引用[^1]建议手动下载并上传文件到阿里云系统。推荐使用最新稳定版(如coturn-4.6.2)。 - **方法1: 使用git下载(推荐)**: ```bash git clone https://github.com/coturn/coturn.git cd coturn ``` - **方法2: 手动下载并上传(如果wget失败)**: 1. 在本地浏览器下载源码包(如`coturn-4.5.0.8.tar.gz`)从[coturn官网](https://github.com/coturn/coturn/releases)。 2. 使用Xftp或SCP上传到阿里云CentOS系统(例如上传到`/home/username/`目录)[^1]。 3. 解压并进入目录: ```bash tar -xzvf coturn-4.5.0.8.tar.gz cd coturn-4.5.0.8 ``` --- ### 步骤3: 编译和安装coturn coturn需要编译安装。确保您在第2步的源码目录中执行以下命令。 - 生成构建配置: ```bash ./configure ``` 如果出现错误(如缺少库),根据提示安装额外依赖(如`openssl-devel`)。 - 编译源码: ```bash make ``` - 安装到系统: ```bash sudo make install ``` 安装后,coturn二进制文件会位于`/usr/local/bin/`目录。验证:`turnserver --version` 应输出版本信息。 引用[^3]强调coturn兼容最新RFC标准(如RFC 5766),CentOS 7.6满足其操作系统要求[^3]。 --- ### 步骤4: 配置coturn服务器 配置文件是部署的核心。coturn使用`turnserver.conf`文件定义设置,如监听IP、端口、realm和用户凭据。阿里云需要配置安全组规则(开放UDP/TCP端口3478和5349)。 - 创建或编辑配置文件: ```bash sudo cp /usr/local/etc/turnserver.conf.default /usr/local/etc/turnserver.conf sudo nano /usr/local/etc/turnserver.conf # 使用vim或nano编辑 ``` - 关键配置项(根据需求修改): ```ini listening-ip=0.0.0.0 # 监听所有接口 external-ip=your_aliyun_public_ip # 替换为阿里云公网IP realm=your_domain.com # 设置realm名称(如example.com) user=username:password # 添加用户名和密码(如test:123456) verbose # 启用详细日志 fingerprint lt-cred-mech # 长期凭据机制 ``` **注意**:阿里云安全组需开放UDP 3478、5349端口(入站规则),确保防火墙允许通信(`sudo firewall-cmd --add-port=3478/udp --permanent && sudo firewall-cmd --reload`)。 --- ### 步骤5: 启动coturn服务 使用命令行启动服务。引用[^4]提供了启动命令示例,指定配置文件和日志选项。 - 启动coturn服务: ```bash sudo turnserver -v -r your_domain.com -a -o -c /usr/local/etc/turnserver.conf # [^4] ``` - `-v`: 详细输出模式 - `-r`: 指定realm(与配置一致) - `-a`: 使用长期凭据 - `-o`: 前台运行(便于调试) - `-c`: 配置文件路径 - 设置为系统服务(可选,实现开机启动): 1. 创建systemd服务文件: ```bash sudo nano /etc/systemd/system/coturn.service ``` 2. 添加内容: ```ini [Unit] Description=Coturn STUN/TURN Server After=network.target [Service] ExecStart=/usr/local/bin/turnserver -c /usr/local/etc/turnserver.conf Restart=always User=root [Install] WantedBy=multi-user.target ``` 3. 启用服务: ```bash sudo systemctl daemon-reload sudo systemctl start coturn sudo systemctl enable coturn ``` --- ### 步骤6: 验证部署 测试STUN/TURN功能以确保正常运行。 - 检查服务状态: ```bash sudo systemctl status coturn # 或使用 netstat -anu | grep 3478 ``` 输出应显示“active (running)”和监听端口。 - 使用在线工具测试: 访问[WebRTC测试页面](https://webrtc.github.io/samples/src/content/peerconnection/trickle-ice/),输入您的TURN服务器URL(如`turn:your_aliyun_public_ip:3478?transport=udp`)和凭据,验证连接状态。 成功连接表明STUN/TURN服务正常工作。 --- ### 注意事项 - **安全性**:coturn配置文件应保护凭据(避免使用默认值)。阿里云环境建议定期更新coturn以修复漏洞。 - **性能**:高并发场景优化(如调整线程数),但CentOS 7.6默认配置已适合中小规模部署[^3]。 - **问题排查**:如果启动失败,检查日志(`/var/log/turn.log`)或添加日志选项(如`--log-file=/var/log/turn.log`)。引用[^1]提到下载问题,确保源码完整上传。 - **备份配置**:定期备份`turnserver.conf`文件,防止意外覆盖。 通过以上步骤,您已在阿里云CentOS 7.6上成功部署STUN/TURN服务器。如果遇到网络问题(如wget失败),优先采用手动上传方法[^1]。部署后,WebRTC应用可使用此服务器进行NAT穿透[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值