zoukankan      html  css  js  c++  java
  • 20155302 2016-2017-2 《Java程序设计》第十周学习总结

    20155302 2016-2017-2 《Java程序设计》第十周学习总结

    教材学习内容总结

    • 网络编程的实质就是两个(或多个)设备(例如计算机)之间的数据传输。

    • 网络最主要的优势在于共享:共享设备和数据,现在共享设备最常见的是打印机。共享数据就是将大量的数据存储在一组机器中,其它的计算机通过网络访问这些数据。

    • 在现有的网络中,网络通讯的方式主要有两种:

    ①TCP(传输控制协议)方式

    ②UDP(用户数据报协议)方式

    • 由于IP地址不容易记忆,所以为了方便记忆,有创造了另外一个概念——域名(Domain Name)。一个IP地址可以对应多个域名,一个域名只能对应一个IP地址。

    • 网络编程中的两种程序就分别是客户端和服务器端。这种网络编程的结构被称作客户端/服务器结构,也叫做Client/Server结构,简称C/S结构;使用浏览器作为客户端的结构被称作浏览器/服务器结构,也叫做Browser/Server结构,简称为B/S结构。总之C/S结构和B/S结构是现在网络编程中常见的两种结构,B/S结构其实也就是一种特殊的C/S结构。P2P程序中既包含客户端程序,也包含服务器端程序。

    • 网络通讯的方式主要有两种: 在网络通讯中,TCP方式就类似于拨打电话,使用该种方式进行网络通讯时,需要建立专门的虚拟连接,然后进行可靠的数据传输,如果数据发送失败,则客户端会自动重发该数据。而UDP方式就类似于发送短信,使用这种方式进行网络通讯时,不需要建立专门的虚拟连接,传输也不是很可靠,如果发送失败则客户端无法获得。由于TCP需要建立专用的虚拟连接以及确认传输是否正确,所以使用TCP方式的速度稍微慢一些,而且传输时产生的数据量要比UDP稍微大一些。论使用TCP方式还是UDP方式进行网络通讯,网络编程都是由客户端和服务器端组成。

    • 客户端一般实现程序界面和基本逻辑实现,客户端的编程主要由三个步骤实现:

    1.建立网络连接:在建立网络连接时需要指定连接到的服务器的IP地址和端口号,建立完成以后,会形成一条虚拟的连接,后续的操作就可以通过该连接实现数据交换了。

    2.交换数据:交换数据严格按照请求响应模型进行,由客户端发送一个请求数据到服务器,服务器反馈一个响应数据给客户端,如果客户端不发送请求则服务器端就不响应。根据逻辑需要,可以多次交换数据,但是还是必须遵循请求响应模型。

    3.关闭网络连接:在数据交换完成以后,关闭网络连接,释放程序占用的端口、内存等系统资源,结束网络编程。

    • 在网络通讯中,第一次主动发起通讯的程序被称作客户端(Client)程序,简称客户端,而在第一次通讯中等待连接的程序被称作服务器端(Server)程序,简称服务器。一旦通讯建立,则客户端和服务器端完全一样,没有本质的区别。

    • 实现UDP方式的编程,包含客户端网络编程和服务器端网络编程,主要由两个类实现,分别是:

    ①DatagramSocket:实现“网络连接”,包括客户端网络连接和服务器端网络连接。DatagramSocket实现的就是发送数据时的发射器,以及接收数据时的监听器的角色。类比于TCP中的网络连接,该类既可以用于实现客户端连接,也可以用于实现服务器端连接。

    ②DatagramPacket:实现对于网络中传输的数据封装,该类的对象代表网络中交换的数据。在UDP方式的网络编程中,无论是需要发送的数据还是需要接收的数据,都必须被处理成DatagramPacket类型的对象,该对象中包含发送到的地址、发送到的端口号以及发送的内容等。和TCP方式的网络传输相比,IO编程在UDP方式的网络编程中变得不是必须的内容,结构也要比TCP方式的网络编程简单一些。

    • 凯撒密码

        public static void main(String args[]) throws Exception{
        String s=args[0];
                int key=Integer.parseInt(args[1]);
                String es="";
                for(int i=0;i<s.length( );i++)
        {  char c=s.charAt(i);
                       if(c>='a' && c<='z') // 是小写字母
                          { c+=key%26;  //移动key%26位
                            if(c<'a') c+=26;  //向左超界
                            if(c>'z') c-=26;  //向右超界
                          }
                       else if(c>='A' && c<='Z') // 是大写字母
        {  c+=key%26;
                            if(c<'A') c+=26;
                            if(c>'Z') c-=26;
                          }
                       es+=c;
                   }
               System.out.println(es);
             }
      
    • DES算法

        import java.io.*;
        import javax.crypto.*;
        public class Skey_DES{ 
         public static void main(String args[])
         throws Exception{ 
        KeyGenerator kg=KeyGenerator.getInstance("DESede");
                    kg.init(168); 
                    SecretKey k=kg.generateKey( );
                    FileOutputStream  f=new FileOutputStream("key1.dat");
                    ObjectOutputStream b=new  ObjectOutputStream(f);
                    b.writeObject(k);
                 }
        }
      
    • RSA算法

        import java.io.*;
        import java.security.*;
        import javax.crypto.*;
        import javax.crypto.spec.*;
        
        public class Skey_RSA{
           public static void main(String args[]) throws Exception{
                KeyPairGenerator kpg=KeyPairGenerator.getInstance("RSA");
                kpg.initialize(1024);
                KeyPair kp=kpg.genKeyPair();
                PublicKey pbkey=kp.getPublic();
                PrivateKey prkey=kp.getPrivate();
                //  保存公钥        
                FileOutputStream  f1=new FileOutputStream("Skey_RSA_pub.dat");
                ObjectOutputStream b1=new  ObjectOutputStream(f1);
        b1.writeObject(pbkey);
                //  保存私钥
                FileOutputStream  f2=new FileOutputStream("Skey_RSA_priv.dat");
                ObjectOutputStream b2=new  ObjectOutputStream(f2);
        b2.writeObject(prkey);
           }
        }
      
    • MD5

        import java.security.*;
        public class DigestPass{
             public static void main(String args[ ]) throws Exception{
                 String x=args[0];
                 MessageDigest m=MessageDigest.getInstance("MD5");
                 m.update(x.getBytes("UTF8"));
                 byte s[ ]=m.digest( );
                 String result="";
                 for (int i=0; i<s.length; i++){
                    result+=Integer.toHexString((0x000000ff & s[i]) | 
        0xffffff00).substring(6);
                 }
                 System.out.println(result);
              }   
        }
      

    代码托管

    评分标准

    1. 正确使用Markdown语法(加1分):

      • 不使用Markdown不加分
      • 有语法错误的不加分(链接打不开,表格不对,列表不正确...)
      • 排版混乱的不加分
    2. 模板中的要素齐全(加1分)

      • 缺少“教材学习中的问题和解决过程”的不加分
      • 缺少“代码调试中的问题和解决过程”的不加分
      • 代码托管不能打开的不加分
      • 缺少“结对及互评”的不能打开的不加分
      • 缺少“上周考试错题总结”的不能加分
      • 缺少“进度条”的不能加分
      • 缺少“参考资料”的不能加分
    3. 教材学习中的问题和解决过程, 一个问题加1分

    4. 代码调试中的问题和解决过程, 一个问题加1分

    5. 本周有效代码超过300分行的(加2分)

      • 一周提交次数少于20次的不加分
    6. 其他加分:

      • 周五前发博客的加1分
      • 感想,体会不假大空的加1分
      • 排版精美的加一分
      • 进度条中记录学习时间与改进情况的加1分
      • 有动手写新代码的加1分
      • 课后选择题有验证的加1分
      • 代码Commit Message规范的加1分
      • 错题学习深入的加1分
      • 点评认真,能指出博客和代码中的问题的加1分
      • 结对学习情况真实可信的加1分
    7. 扣分:

      • 有抄袭的扣至0分
      • 代码作弊的扣至0分
      • 迟交作业的扣至0分

    点评模板:

    • 博客中值得学习的或问题:

      • xxx
      • xxx
      • ...
    • 代码中值得学习的或问题:

      • xxx
      • xxx
      • ...
    • 基于评分标准,我给本博客打分:XX分。得分情况如下:xxx

    • 参考示例

    点评过的同学博客和代码

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

    本周学习的知识很复杂难懂,而且需要和之前学习的内容基础结合起来,所以前面的基础很重要,在学习过程中我不断翻阅前面知识,结合起来学习会使效率提高。

    学习进度条

    代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
    目标 5000行 30篇 400小时
    第一周 20/20 2/2 20/20
    第二周 140/160 2/4 18/38
    第三周 113/273 1/5 20/58
    第四周 335/608 1/6 20/78
    第五周 1159/1408 1/7 30/108
    第六周 452/1860 1/8 20/128
    第七周 343/2203 1/9 30/158
    第八周 448/2651 1/10 20/178
    第九周 516/3167 1/11 20/198
    第十周 367/3534 1/12 20/218
  • 相关阅读:
    Camera
    iOS实现截屏 并合适保存
    将UIView转成UIImage,将UIImage转成PNG/JPG
    iOS7Status bar适配
    @synthesize obj=_obj的意义详解 @property和@synthesize
    iOS各种问题处理
    Foundation框架中的NSNumber对象详解
    iOS 文件和数据管理 (可能会删除本地文件储存)
    当ABAP遇见普罗米修斯
    一个工作13年的SAP开发人员的回忆:电子科技大学2000级新生入学指南
  • 原文地址:https://www.cnblogs.com/STILLlover521/p/6776298.html
Copyright © 2011-2022 走看看