数据传输项目(五)

1、秘钥协商服务端开发流程

  1. 服务器的前期准备工作,建立socket,端口复用、绑定,监听
  2. while(1){
        accept();
        //创建子线程
        phread_create();
        //设置子线程分离属性
        pthread_detach();
    
    }
    //子线程处理函数
    {
    //读取客户端发来的数据
    
    //解码
    
    //判断是那种服务
    
    
    }
  3.  钥协商流程
int secKeyAgree(){
    
    //判断clientID是否合法

    //验证随机字符串是否合法
    //生成消息认证码
    //比较生成的消息认证码和客户端发来的消息认证码是否相同


    //生成随机字符串

    //组织应答数据发给客户端
    seckeyID是从数据库中查询的,是唯一的一个值
    //对结构体进行编码操作,发送给客户端

    //关闭网络连接

    //将客户端发来的字符串和自己生成的字符串就行拼接,生成秘钥
    
    //将密钥写入共享内存

    //释放内存
    

}

保存信息的几种方式:

1、配置文件:

  1. 用户自定义格式
  2. xml格式的配置文件
  3. json格式的配置文件

2、将配置信息设置为环境变量

char *p=getenv("HOME");

3、存到数据库中

将配置信息写入配置文件:省去了编译源代码的麻烦,只要修改配置文件重启服务即可

 守护进程创建步骤:

1、父进程创建子进程,然后父进程退出

fork();
父进程退出手段:exit(),return (),kill(getpid(),SIGKILL),abort(),raise(SIGKILL);

2、子进程调用setsid()函数创建一个会话

---------注意:调用setsid()函数的进程不能是组长进程(父进程死掉,子进程的组长仍然是父进程的id)

3、改变当前工作目录(可以省略)----chdir()

4、修改当前进程文件掩码-----umask(0002);(也不是必须的)

5、关闭或者重定向标准输入、标准输出、标准错误输出

close(),dup2()-int fd=open("/dev/null","O_RDWR");dup2(fd,STDIN_FILENO)

6、核心操作

                                                        shell脚本

 1、shell脚本:就是一些命令的集合,在脚本文件中可以有流程控制,如顺序、条件和循环分支

2、一般以.sh为后缀文件命名

3、

#! /bin/bash -----可以省略,在脚本文件中可以用#注释
脚本创建出来没有可执行权限,需要自己加
chmod u+x xxx.sh #u是给用户添加权限
./xxx.sh -> 最常用的方式
sh xxx.sh

4、变量

1、自定义定义变量:变量没有数据类型,新变量定义必须初始化
value=123
value="123"
value="hello,world"
赋值的时候=前后不可以有空格

使用单引号和双引号的区别
对于""中的变量会直接展开,而对于''中的变量会被当成普通字符串
echo "$HOME" 和 echo '$HOME'

2、环境变量如HOME PATH
将普通变量设置为环境变量:export FILEPATH="XXXX"
在用户下设置环境变量后,都可以在用户的进程下通过调用getenv()函数获取环境变量的值

3、位置变量---执行shell脚本时传到内部的变量
$0 - 脚本文件的名字
$1 - 第一个参数
$2 - 第二个参数
$3 - 第三参数
# 执行脚本
./test.sh 1 2 3 4 a b c d e f

$#:参数的个数
$?:命令执行结果成功为0,失败为非0值
$$:shell脚本的pid
$@:全部参数的值

4、取普通变量的值
第一种方式: $变量名
$PATH
$value
第二种方式: ${变量名}
${PATH}
${value}

5. 取命令执行之后的得到的值
第一种方式
value=$(shell命令)
第二种方式:
value=`shell命令`

5、条件判断语法if

 条件判断语句和[ 判断语句 ]左右必须要有空格间隔
if[ 判断语句 ];then 写在同一行必须有;
处理语句
处理语句
fi
# 或者
if[ 判断语句 ]
then
处理语句
处理语句
fi

if [ 判断语句 ];then
处理语句
处理语句
elif [ 判断语句 ];then
处理语句
处理语句
else
处理语句
处理语句
fi

shell测试条件需要可以去查询

5、循环控制

循环:
for语句和while

例1:
for var in apple pear banana
do
echo $var
done

例2:打印当前所有的文件
for file in `ls`
do
echo $file
done

例3:求1-100的和
sum=0
for i in {1..100}
do
sum=$[$sum+$i]
done
echo "sum==[$sum]"


while的用法:
案例: 求1-10的和
sum=0
i=0
while [ $i -le 10 ]#-le:<=
do
sum=$[$sum+$i]#外面最后也有变量符号
i=$[$i+1]
done
echo "sum==[$sum]"

6、awk介绍

awk 可以将文件拆分成功若干行, 根据指定的分隔符, 再将每一行拆分成若干列, 默认按照空格或tab进行拆分
1. 基本语法格式
   awk 参数 '条件{处理动作}' 操作的文件或数据
   awk 参数 '/正则表达式{处理动作}' 操作的文件或数据
2. 指定分隔符的参数: -F
    -F分隔符
    如果不指定分隔符, 默认是按照空格或者tab进行拆分
3. 如何使用变量取出某一列?
    $0 - 当前行
    $1 - 拆分的第一列
    $2 - 拆分的第二列
    $3 - 拆分的第三列
...
打印某一列的值
print $n

例子:
awk '{print $1}'#单引号中间大括号里面是要进行的操作
awk -F ":" '{print $1}'

用法:
ps -ef | grep itcast | awk '{print $2}'
使用awk找出某个进程的PID
ps -ef | grep svrMain | grep -v grep | awk '{print $2}'

7、编写杀死守护进程的脚本

#!/bin/sh
PID='ps -ef | grep svrMain | grep -v grep | awk '{print $2}''
if [ -n $PID ] #-n字符串不为空
then
        kill -9 &PID
fi

信号相关

 信号的一些知识回顾:

信号的相关函数:
signal sigaction
raise kill abort
SIGSTOP SIGKILL SIGPIPE SIGALARM SIGCHLD SIGCONT SIGINT SIGQUIT SIGTERM
SIGUSR1 SIGUSR2 SIGSEGV
sigemptyset sigaddset sigfillset sigdelset sigismember sigprocmask sigpending 
SIGCHLD信号:子进程退出,父进程会收到内核发来的这个信号可以调用wait()函数对子进程进行回收
信号不支持排队
信号四要素:编号 名字 默认处理动作 信号的产生

注册SIGUS1的捕捉函数,那么脚本就可以改成

#!/bin/sh
PID='ps -ef | grep svrMain | grep -v grep | awk '{print $2}''
if [ -n $PID ] #-n字符串不为空
then
        kill -USR1 &PID
fi

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值