zoukankan      html  css  js  c++  java
  • 2017-2018-1 20155214 《信息安全系统设计基础》第13周学习总结

    2017-2018-1 20155214 《信息安全系统设计基础》第13周学习总结

    教材学习内容总结

    本章主要学习网络编程,重点研究 客户端-服务器编程模型 。本章学习的知识承接了我们之前学习的计算机网络课程,与本学期的 信息安全技术网络安全编程 课程息息相关。对于信息安全系学生而言不可谓不重要。

    在本章学习中,重点实现了:

    1. socket服务器和客户端搭建
    2. daytime服务器
    3. echo服务器
    4. wc服务器
    5. 服务器迭代
    6. 服务器并发
    7. 服务器文件简单加密

    第11章习题解答

    • 练习题11.1
    十六进制地址 点分十进制地址
    0x0 0.0.0.0
    0xffffffff 255.255.255.255
    0x7f000001 127.0.0.1
    0xcdbca079 205.188.160.121
    0x400c950d 64.12.149.13
    0xcdbc9217 205.188.146.23
    • 练习题11.2
      编程hex2dd.c,将他的十六进制参数转换为点分十进制字符串并打印出结果。

    hex2dd.c 码云链接

    • 练习题11.3
      编程dd2hex.c,将他的点分十进制参数转换为十六进制数并打印出结果。

    dd2hex.c 码云链接

    • 练习题11.4
      编写HOSTINFO的一个版本,用inet_pton而不是getnameinfo将每个套接字地址转换成点分十进制地址字符串。

    Hostinfo 码云链接

    • 练习题11.5
      在10.11节中,我们警告过你关于在网络应用中使用标准I/O函数的危险,然而,CGI程序却能没有任何问题地使用标准I/O。为什么?

    在子进程中运行的CGI程序不需要显式地关闭他的输入输出流。当子进程终止时,内核会自动关闭所有描述符。

    详细总结本章要点

    socket服务器和客户端搭建

    • 如何创建服务器:

    在服务器端建立套接字所涉及的步骤如下:

    1. 创建一个socket可使用socket()的系统调用
    2. 使用bind()系统调用套接字绑定到一个地址。对于互联网上的服务器套接字,地址包括主机的端口号。
    3. 连接监听listen()系统调用
    4. 接受连接使用accept()系统调用。此调用通常会阻塞,直到客户端与服务器连接。
    5. 发送和接收数据read()和write()系统调用.
    • 如何创建客户端:
    1. 系统调用有所不同的客户端和服务器建立连接,但两者套接字涉及的基本构造。这两个过程分别建立自己的套接字。
    2. 在客户端建立套接字所涉及的步骤如下:
    3. 创建一个socket可使用socket()的系统调用
    4. 套接字连接的服务器地址使用connect()系统调用。
    5. 发送和接收数据。做到这一点的方法有许多,但最简单的方法是使用read()和write()

    daytime服务器实现

    • 设计内容

    设计一个daytime服务器,向客户端返回服务器当前时间。

    • 设计思路
    /*伪代码 serveri.c*/
    
    int main(){
    ……
    
    服务器与客户端建立连接
    
    服务器阻塞监听
    
    if(接收到客户端消息){
    调用localtime(),将时间保存到缓冲区
    
    将服务器时间发送至客户端。
    
    ……
    }
    
        
    }
    
    
    • 运行截图

    daytime服务器 码云链接

    echo服务器实现

    • 设计内容

    设计一个echo服务器,当客户端向服务器发送消息时,向客户端返回它所发送的消息。

    • 设计思路
    /*伪代码 serveri.c*/
    
    int main(){
    ……
    
    服务器与客户端建立连接
    
    服务器阻塞监听
    
    if(接收到客户端消息){
    
    调用echo()
    
    将rbuf缓冲区接收到的信息保存到sbuf缓冲区中
    
    将sbuf缓存区中的信息发送至客户端。
    
    }
    
    ……
    }
    
        
    }
    
    
    • 运行截图

    echo服务器 码云链接

    wc服务器实现

    • 设计内容

    设计一个wc服务器,当客户端向服务器发送一个文本文件时,服务器返回文本文件的字数。

    • 设计思路
    //client.c
    
    int main(){
        ……
        客户端与服务器建立连接
        将对称密钥利用服务器端的公钥加密,并发送给服务器
        
        while(文件未到结尾){
        按缓冲区大小读取文件
        
        将缓冲区的数据发送给服务器
        }
        
        接受服务器返回的wc字数
        
    }
    
    //serveri.c
    
    int main(){
        ……
        服务器与客户端建立连接
        服务器进入阻塞监听
        
        if(接受到客户端的消息){
        
        接收信息至缓存区
        
        利用wc函数计算缓冲区数据字数并加入count
        }
        
        将总字数count发送给客户端
        
        ……
    }
    
    
    • 运行截图

    wc服务器 码云链接

    服务器迭代

    这是最简单形式的服务器的服务进程的客户端和第一个请求,然后完成后,需要从其他客户机的请求。同时,另一个客户端一直等待。

    服务器并发

    这种类型的服务器运行多个进程并发服务请求一次。因为一个进程可能需要更长的时间,但其他客户机又不能等太久。 Unix下写一个并发服务器的方法:

    • 多进程
    • 多线程

    服务器文件简单加密

    • 设计内容

    设计一个混合密码系统。对“wc服务器”进行防护。

    • 设计思路
    /*
    1.利用openSSL生成对称密钥
    2.利用openSSL生成公钥和私钥
    */
    
    //client.c
    
    int main(){
        ……
        客户端与服务器建立连接
        将对称密钥利用服务器端的公钥加密,并发送给服务器
        
        while(文件未到结尾){
        按缓冲区大小读取文件
        将缓存区中的数据利用对称密钥加密
        将缓冲区的加密数据发送给服务器
        }
        
        接受并利用对称密钥解密服务器返回的wc字数
        
    }
    
    //serveri.c
    
    int main(){
        ……
        服务器与客户端建立连接
        服务器进入阻塞监听
        
        if(接受到客户端的消息){
        利用服务器端私钥解密获得通信的对称密钥
        
        接收信息至缓存区
        利用对称密钥解密缓冲区内的数据
        
        利用wc函数计算缓冲区里解密后数据字数并加入count
        }
        
        将总字数count利用对称密钥加密后发送给客户端
        
        ……
    }
    
    
    • 运行截图

    文件加密服务器 码云链接

    结对及互评

    结对学习搭档讲解问题

    1.客户端/服务器及其子进程的参数和信息如何传递?

    1. 客户端向服务器传参
      通过URI传递,
      “?”字符分隔文件名和参数,参数之间用“&”分隔开,特殊字符有对应编码。

    2. 服务器向子程序传参
      遵循CGI标准,子进程通过设置CGI环境变量。程序在运行时通过Linux getenv来引用。

    3. 服务器向子进程传参
      服务器通过设置CGI环境变量,传递信息。

    2._in后缀是什么,有什么用?
    “_in”后缀是互联网活动缩写,在“socket.h”库中代表着函数变量格式应用于网络层传输。

    结对学习搭档链接

    http://www.cnblogs.com/LeeX1997/p/8047327.html

    结对学习照片

    其他(感悟、思考等,可选)

    通过第11章网络编程的学习,我对于用c语言搭建服务器和客户端有了深入理解,并且更加实质性的明白了音频、文件等在网络中以二进制传输。

    代码托管

    码云链接:https://gitee.com/besti155214/BESTI.IS.ISSDB.20155214/

    参考资料

  • 相关阅读:
    数据库悲观锁与乐观锁
    windows消息大全
    Ubuntu 16.04 LTS GNOME版本下载
    Spring MVC-表单(Form)处理示例(转载实践)
    Spring MVC-Hello World示例(转载实践)
    Spring MVC-环境设置(转载实践)
    MyBatis在注解上使用动态SQL(@select使用if)
    Ubuntu 16.04安装Ubuntu After Install工具实现常用软件批量安装
    Ubuntu 16.04开机自动挂载硬盘分区(转)
    Spring MVC-概述(转载实践)
  • 原文地址:https://www.cnblogs.com/besti155214/p/8052476.html
Copyright © 2011-2022 走看看