20155236 2016-2017-2 《Java程序设计》第十周学习总结
20155236 2016-2017-2 《Java程序设计》第十周学习总结
教材学习内容总结
网络编程就是在两个或两个以上的设备(例如计算机)之间传输数据。
-
程序员所作的事情就是把数据发送到指定的位置,或者接收到指定的数据,这个就是狭义的网络编程范畴。
-
在发送和接收数据时,大部分的程序设计语言都设计了专门的API实现这些功能,程序员只需要调用即可。
网络概述
-
网络编程就是两个或多个设备(程序)之间的数据交换。
-
识别网络上的每个设备:
-
IP地址:每个计算机在联网以后都拥有一个唯一的合法IP地址,就像手机号,在计算机网络中,现在命名IP地址的规定是IPv4协议,该协议规定每个IP地址由4个0-255之间的数字组成。这个IP地址可能是动态的,也可能是固定的。
-
域名(Domain Name)。
一个IP地址可以对应多个域名,一个域名只能对应一个IP地址。
DNS服务器:在网络中传输的数据,全部是以IP地址作为地址标识,所以在实际传输数据以前需要将域名转换为IP地址,实现这种功能的服务器称之为DNS服务器,也就是通俗的说法叫做域名解析。 当DNS服务器正常工作时,使用IP地址或域名都可以很方便的找到计算机网络中的某个设备,例如服务器计算机。当DNS不正常工作时,只能通过IP地址访问该设备。
C/S结构:网络编程的结构被称作客户端/服务器结构,也叫做Client/Server结构。
B/S结构:使用浏览器作为客户端的结构被称作浏览器/服务器结构,也叫做Browser/Server结构。B/S结构其实也就是一种特殊的C/S结构。
P2P程序:P2P程序中既包含客户端程序,也包含服务器端程序,是一种特殊的程序。
端口:让一个计算机可以同时运行多个网络程序。端口的号码必须位于0-65535之间,每个端口唯一的对应一个网络程序,一个网络程序可以使用多个端口。
-
协议(Protocol):在实际进行数据交换时,为了让接收端理解该数据,需要规定该数据的格式,这个数据的格式就是协议。
如何来编写协议格式:只要按照这种协议格式能够生成唯一的编码,按照该编码可以唯一的解析出发送数据的内容即可。也正因为各个网络程序之间协议格式的不同,所以才导致了客户端程序都是专用的结构。
-
在现有的网络中,网络通讯的方式主要有两种:
TCP(传输控制协议)方式:进行网络通讯时,需要建立专门的虚拟连接,然后进行可靠的数据传输,如果数据发送失败,则客户端会自动重发该数据。
UDP(用户数据报协议)方式:进行网络通讯时,不需要建立专门的虚拟连接,传输也不是很可靠,如果发送失败则客户端无法获得。
-
网络编程的一般有两种结构:
客户端/服务器结构,也叫做Client/Server结构,简称C/S结构。优点是表现力丰富,缺点是通用性差、维护的压力比较大。
浏览器/服务器结构,也叫做Browser/Server结构,简称为B/S结构。优点是开发的压力比较小,不需要维护客户端。缺点是限制比较大,表现力不强,无法进行系统级操作等。
网络编程技术
-
客户端的编程主要由三个步骤实现:
1.建立网络连接:在建立网络连接时需要指定连接到的服务器的IP地址和端口号,建立完成以后,会形成一条虚拟的连接,后续的操作就可以通过该连接实现数据交换了。
2.交换数据:连接建立以后,就可以通过这个连接交换数据了。交换数据严格按照请求响应模型进行,由客户端发送一个请求数据到服务器,服务器反馈一个响应数据给客户端,如果客户端不发送请求则服务器端就不响应。根据逻辑需要,可以多次交换数据,但是还是必须遵循请求响应模型。
3.关闭网络连接:在数据交换完成以后,关闭网络连接,释放程序占用的端口、内存等系统资源,结束网络编程。
-
实现服务器端监听的代码为:
ServerSocket ss = new ServerSocket(10000);
-
实现UDP方式的编程,包含客户端网络编程和服务器端网络编程,主要由两个类实现,分别是:
DatagramPacket:实现对于网络中传输的数据封装,该类的对象代表网络中交换的数据。在UDP方式的网络编程中,无论是需要发送的数据还是需要接收的数据,都必须被处理成DatagramPacket类型的对象,该对象中包含发送到的地址、发送到的端口号以及发送的内容等。和TCP方式的网络传输相比,IO编程在UDP方式的网络编程中变得不是必须的内容,结构也要比TCP方式的网络编程简单一些。
InetAddress类:该类的功能是代表一个IP地址,并且将IP地址和域名相关的操作方法包含在该类的内部。
教材学习中的问题和解决过程
- 和TCP方式的网络传输相比,IO编程有什么区别?
IO编程在UDP方式的网络编程中变得不是必须的内容,结构也要比TCP方式的网络编程简单一些。 - 在JDBC里要表示日期、时期所使用的是什么?
日期是使用java.sql.Date,其日期格式是“年、月、日”,要表示时间的话则是使用java.sql.Time,其时间格式为“时、分、秒”,如果要表示“时、分、秒、微秒”的格式,你可以使用java.sql.Timestamp。 - 每一次执行executeUpdate(),其实都会向数据库发送一次SQL,如果大量更新的SQL有一万笔,就等于通过网络进行了一万次的信息传送,网络传送信息实际上必须打开I/O、进行路由等动作。所以最好就是所有收集的SQL,最后会串为一句SQL,然后传送给数据库,既然是批次更新,顾名思义,就是仅用在更新上,所以批次更新的限制是?
SQL不能是SELECT,否则会抛出异常。 - 如何使服务器端支持多个客户端同时工作?
改善服务端示例程序将由两个部分组成,MulThreadSocketServer类实现服务器端控制,实现接收客户端连接,然后开启专门的逻辑线程处理该连接,LogicThread类实现对于一个客户端连接的逻辑处理,将处理的逻辑放置在该类的run方法中。
代码调试中的问题和解决过程
-
22.6中使用await而没有使用wait,两者区别为?
wait()后,线程会释放掉它所占有的“锁标志”,从而使线程所在对象中的其他shnchronized数据可被别的线程使用。
代码托管
上传完毕。但是statistics出现一点问题,应该是370行代码但是只有65行。。。不知道为啥
错题总结
1.教材第十章示例代码中(p 305 IO .java )类符合SOLID原则中的OCP和DIP原则。
结对及互评
-
学习内容
1.使用C/S结构的程序,在开发时需要分别开发客户端和服务器端,这种结构的优势在于由于客户端是专门开发的,所以根据需要实现各种效果,专业点说就是表现力丰富,而服务器端也需要专门进行开发。但是这种结构也存在着很多不足,例如通用性差,几乎不能通用等,也就是说一种程序的客户端只能和对应的服务器端通讯,而不能和 其它服务器端通讯,在实际维护时,也需要维护专门的客户端和服务器端,维护的压力比较大。
2.使用B/S结构的程序,在开发时只需要开发服务器端即可,这种结构的优势在于开发的压力比较小,不需要维护客户端。但是这种结构也存在着很多不足,例如浏览器的限制比较大,表现力不强,无法进行系统级操作等。
结对照片
点评过的同学博客和代码
其他(感悟、思考等,可选)
这周是这本学习笔记的最后的部分,这本学习笔记经过这两个月就算正式学完一遍,但我觉得我对各个章节的掌握情况不尽相同,这学习的一遍结束后,或许才是真正的开始,古人所谓读书要读三遍,所以我还需要反过头来继续巩固和复习,相信在回头看的过程中一定还会有许多新的体会和感悟,继续努力。
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 10/10 | 1/1 | 10/10 | |
第二周 | 100/100 | 2/2 | 19/25 | |
第三周 | 200/278 | 1/3 | 10/26 | |
第四周 | 660/938 | 1/4 | 10/36 | |
第五周 | 1100/2100 | 1/5 | 18/54 | |
第六周 | 740/2840 | 1/6 | 23/77 | |
第七周 | 352/3192 | 2/8 | 20/97 | |
第八周 | 631/3805 | 1/9 | 20/117 | |
第九周 | 387/4200 | 2/11 | 20/137 | |
第十周 | 370/4570 | 1/12 | 15/152 |
-
计划学习时间:25小时
-
实际学习时间:15小时
-
改进情况:觉得自己没什么改进,反而有点退步,恩还需要对于内容结合起来之后的学习与熟悉。
参考资料
无0.0