20145202马超 2016-2017-2 《Java程序设计》第10周学习总结

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

教材学习内容总结

1、网络编程html

1.网络概述
网络编程就是在两个或两个以上的设备(例如计算机)之间传输数据。程序员所做的事情就是把数据发送到指定的位置,或者接收到指定的数据,这个就是狭义的网络编程范畴。在发送和接收数据时,大部分的程序设计语言都设计了专门的API实现这些功能,程序员只须要调用便可。
网络编程技术是当前一种主流的编程技术,随着联网趋势的逐步加强以及网络应用程序的大量出现,因此在实际的开发中网络编程技术得到了大量的使用。java

2.计算机网络概述:
按照计算机网络的定义,经过必定的物理设备将处于不一样位置的计算机链接起来组成的网络,这个网络中包含的设备有:计算机、路由器、交换机等等。git

为了可以方便的识别网络上的每一个设备,网络中的每一个设备都会有一个惟一的数字标识,这个就是IP地址。在计算机网络中,如今命名IP地址的规定是IPv4协议,每一个接入网络的计算机都拥有惟一的IP地址,这个IP地址多是固定的,也能够是动态的。程序员

域名:例如sohu.com,一个IP地址能够对应多个域名,一个域名只能对应一个IP地址。算法

DNS服务器是在实际传输数据之前将域名转换为IP地址的服务器,当用户在浏览器输入域名时,浏览器首先请求DNS服务器,将域名转换为IP地址,而后将转换后的IP地址反馈给浏览器,而后再进行实际的数据传输。数据库

端口是为了让一个计算机能够同时运行多个网络程序,在同一个计算机中每一个程序对应惟一的端口,这样一个计算机上就能够经过端口区分发送给每一个端口的数据了,换句话说,也就是一个计算机上能够并发运行多个网络程序,而不会在互相之间产生干扰。编程

3.网络编程概述:
网络通信基于“请求-响应”模型,在网络通信中,第一次主动发起通信的程序被称做客户端(Client)程序,简称客户端,而在第一次通信中等待链接的程序被称做服务器端(Server)程序,简称服务器。一旦通信创建,则客户端和服务器端彻底同样,没有本质的区别。数组

网络编程中常见的两种结构:C/S结构和B/S结构。C/S结构即客户端/服务器结构,在开发时须要分别开发客户端和服务器端,这种结构的优点在于因为客户端是专门开发的,能够根据须要实现各类效果,它的缺点在于通用性查,维护压力大。B/S结构即浏览器/服务器结构,在开发时只须要开发服务器端便可,这种结构的优点在于开发的压力比较小,不须要维护客户端,可是览器的限制比较大,表现力不强。浏览器

P2P程序是一种特殊的程序,应该一个P2P程序中既包含客户端程序,也包含服务器端程序,例如BT,使用客户端程序部分链接其它的种子(服务器端),而使用服务器端向其它的BT客户端传输数据。服务器

在实际进行数据交换时,为了让接收端理解该数据,计算机比较笨,什么都不懂的,那么就须要规定该数据的格式,这个数据的格式就是协议。

4.网络通信方式:
网络通信的方式主要有两种:TCP(传输控制协议)方式和UDP(用户数据报协议)方式。

TCP方式须要创建专门的虚拟链接,而后进行可靠的数据传输,若是数据发送失败,则客户端会自动重发该数据。而UDP方式就相似于发送短信,使用这种方式进行网络通信时,不须要创建专门的虚拟链接,传输也不是很可靠,若是发送失败则客户端没法得到。

重要的数据通常使用TCP方式进行数据传输,而大量的非核心数据则都经过UDP方式进行传递,在一些程序中甚至结合使用这两种方式进行数据的传递。
网络编程技术。

5.客户端网络编程步骤:
创建网络链接:客户端网络编程的第一步都是创建网络链接。在创建网络链接时须要指定链接到的服务器的IP地址和端口号,创建完成之后,会造成一条虚拟的链接,后续的操做就能够经过该链接实现数据交换了。

6.交换数据:链接创建之后,就能够经过这个链接交换数据了。交换数据严格按照请求响应模型进行,由客户端发送一个请求数据到服务器,服务器反馈一个响应数据给客户端,若是客户端不发送请求则服务器端就不响应。

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

8.服务器端网络编程步骤:
(1)、监听端口:服务器端属于被动等待链接,因此服务器端启动之后,不须要发起链接,而只须要监听本地计算机的某个固定端口便可,这个端口就是服务器端开放给客户端的端口,服务器端程序运行的本地计算机的IP地址就是服务器端程序的IP地址。
(2)、得到链接:当客户端链接到服务器端时,服务器端就能够得到一个链接,这个链接包含客户端的信息,例如客户端IP地址等等,服务器端和客户端也经过该链接进行数据交换,通常在服务器端编程中,当得到链接时,须要开启专门的线程处理该链接,每一个链接都由独立的线程实现。
(3)、交换数据:服务器端经过得到的链接进行数据交换。服务器端的数据交换步骤是首先接收客户端发送过来的数据,而后进行逻辑处理,再把处理之后的结果数据发送给客户端。简单来讲,就是先接收再发送,这个和客户端的数据交换数序不一样。
(4)、关闭链接:当服务器程序关闭时,须要关闭服务器端,经过关闭服务器端使得服务器监听的端口以及占用的内存能够释放出来,实现了链接的关闭。

教材学习中的问题和解决过程


2、TCP编程
1.在客户端网络编程中,首先须要创建链接,在Java API中以java.net.Socket类的对象表明网络链接,因此创建客户端网络链接,也就是建立Socket类型的对象,该对象表明网络链接,示例以下:Socket socket = new Socket(“192.168.1.103”,10000);
2.链接创建以后,而后按照“请求-响应”模型进行网络数据交换,在Java语言中,数据传输功能由Java IO实现,也就是说只须要从链接中得到输入流和输出流便可,而后将须要发送的数据写入链接对象的输出流中,在发送完成之后从输入流中读取数据便可:OutputStream os = socket1.getOutputStream();
3.最后当数据交换完成之后,关闭网络链接,释放网络链接占用的系统端口和内存等资源,完成网络操做:socket.close();

TCP服务器编程:
1.在服务器端程序编程中,因为服务器端实现的是被动等待链接,因此服务器端编程的第一个步骤是监听端口,也就是监听是否有客户端链接到达:ServerSocket ss = new ServerSocket(10000);
2.而后是得到链接,当有客户端链接到达时,创建一个和客户端链接对应的Socket连 接对象,从而释放客户端链接对于服务器端端口的占用:Socket socket = ss.accept();
3.链接得到之后,后续的编程就和客户端的网络编程相似了,这里得到的Socket类型的链接就和客户端的网络链接同样了,只是服务器端须要首先读取发送过来的数据,而后进行逻辑处理之后再发送给客户端,也就是交换数据的顺序和客户端交换数据的步骤恰好相反。
4.最后,在服务器端通讯完成之后,关闭服务器端链接:ss.close();

3、UDP编程
1.使用UDP方式无需创建专用的虚拟链接,因为无需创建专用的链接,因此对于服务器的压力要比TCP小不少,可是使用该种方式最大的不足是传输不可靠,因此在网络编程中,必需要求可靠传输的信息通常使用TCP方式实现,通常的数据才使用UDP方式实现。

2.UDP方式的网络编程也在Java语言中得到了良好的支持,因为其在传输数据的过程当中不须要创建专用的链接等特色,因此在Java API中设计的实现结构和TCP方式不太同样。固然,须要使用的类仍是包含在java.net包中。

3.在Java API中,实现UDP方式的编程,包含客户端网络编程和服务器端网络编程,主要由两个类实现:
DatagramSocket:DatagramSocket实现的是发送数据时的发射器,以及接收数据时的监听器的角色。类比于TCP中的网络链接,该类既能够用于实现客户端链接,也能够用于实现服务器端链接。
DatagramPacket:类的对象表明网络中交换的数据。在UDP方式的网络编程中,不管是须要发送的数据仍是须要接收的数据,都必须被处理成DatagramPacket类型的对象,该对象中包含发送到的地址、发送到的端口号以及发送的内容等。

UDP客户端编程:
1.UDP方式的创建链接和TCP方式不一样,只须要创建一个链接对象便可,不须要指定服务器的IP和端口号码,示例以下:DatagramSocket ds = new DatagramSocket();
2.使用UDP在发送数据时,须要将须要发送的数据内容首先转换为byte数组,而后将数据内容、服务器IP和服务器端口号一块儿构形成一个DatagramPacket类型的对象,这样数据的准备就完成了,发送时调用网络链接对象中的send方法发送该对象便可,一样,UDP方式在进行网络通信时,也遵循“请求-响应”模型。
3.UDP的接收数据是这样实现的:首先构造一个数据缓冲数组,该数组用于存储接收的服务器端反馈数据,该数组的长度必须大于或等于服务器端反馈的实际有效数据的长度。而后以该缓冲数组为基础构造一个DatagramPacket数据包对象,最后调用链接对象的receive方法接收数据便可。接收到的服务器端反馈数据存储在DatagramPacket类型的对象内部。
4.UDP关闭链接,使用链接对象中的close方法便可:ds.close();

UDP方式的网络编程因为不创建虚拟的链接,因此在实际使用时和TCP方式存在不少的不一样,最大的一个不一样就是“无状态”。该特色指每次服务器端都收到信息,可是这些信息和链接无关,换句话说,也就是服务器端只是从信息是没法识别出是谁发送的,这样就要求发送信息时的内容须要多一些,屡次发送客户端:实现的原理和TCP方式相似,在客户端将数据的发送和接收放入循环中,而服务器端则将接收到的每一个数据包启动一个专门的线程进行处理。并发处理数据包的服务器:用一个循环来接收客户端发送过来的数据包,当接收到数据包之后启动一个LogicThread线程处理该数据包。这样服务器端就能够实现同时处理多个数据包了。

4、网络协议
网络协议是指对于网络中传输的数据格式的规定,其实质也是客户端程序和服务器端程序对于数据的一种约定。

对于同一个网络程序来讲,通常都会涉及到两个网络协议格式:客户端发送数据格式和服务器端反馈数据格式,在实际设计时,须要一一对应。

客户端程序须要完成的处理为:
1.客户端发送协议格式的生成
2.服务器端反馈数据格式的解析
服务器端程序须要完成的处理为:
1.服务器端反馈协议格式的生成
2.客户端发送协议格式的解析

教材学习有问题先去https://shimo.im/doc/1i1gldfsojIFH8Ip/看看,若是别人没有提出相同问题,能够编辑文档添加,而后把本身提出的问题复制到下面:

  • 问题1:加密算法虽然可以加密可是对于缓冲区溢出的攻击貌似加密算法并不能解决
  • 问题1解决方案:能够直接设置成锥堆栈不能修改,或者处理好边界问题就能够。

    代码调试中的问题和解决过程

教材中代码调试有问题先去https://shimo.im/doc/1i1gldfsojIFH8Ip/看看,若是别人没有提出相同问题,能够编辑文档添加,而后把本身提出的问题复制到下面:

  • 此次的代码基本上都是找的成品,没啥问题

代码托管

上周考试错题总结

结对及互评

评分标准

  1. 正确使用Markdown语法(加1分):
  2. 模板中的要素齐全(加1分)
  3. 教材学习中的问题和解决过程, 一个问题加1分,1分
  4. 其余加分:
    • 感想,体会不假大空的加1分
    • 排版精美的加一分
    • 进度条中记录学习时间与改进状况的加1分
    • 有动手写新代码的加1分
    • 课后选择题有验证的加1分
    • 代码Commit Message规范的加1分
    • 错题学习深刻的加1分
    • 点评认真,能指出博客和代码中的问题的加1分
    • 结对学习状况真实可信的加1分
  • 基于评分标准,我给本博客打分:12分。

  • 参考示例

点评过的同窗博客和代码

  • 本周结对学习状况
    • 20155303
    • 结对照片

    • 结对学习内容
      • 研究边界的问题。
  • 上周博客互评状况()

  • 只有一我的回复博客互评那个活动,因此我也就之评论了一我的。

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

xxx
xxx

学习进度条

尝试一下记录「计划学习时间」和「实际学习时间」,到期末看看能不能改进本身的计划能力。这个工做学习中很重要,也颇有用。
耗时估计的公式
:Y=X+X/N ,Y=X-X/N,训练次数多了,X、Y就接近了。

参考:软件工程软件的估计为何这么难软件工程 估计方法

  • 计划学习时间:20小时

  • 实际学习时间:14小时

  • 改进状况:

(有空多看看现代软件工程 课件
软件工程师能力自我评价表
)

参考资料

相关文章
相关标签/搜索