教材内容总结

网络编程

定义:网络编程就是在两个或两个以上的设备之间传输数据。

计算机网络概述:

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

网络中的每个设备都会有一个唯一的数字标识,这个就是IP地址。在计算机网络中,现在命名IP地址的规定是IPv4协议,该协议规定每个IP地址由4个0-255之间的数字组成,例如10.0.120.34

为了方便记忆,有创造了另外一个概念——域名(Domain Name),例如sohu.com等。一个IP地址可以对应多个域名,一个域名只能对应一个IP地址。

端口(port):在同一个计算机中每个程序对应唯一的端口,这样一个计算机上就可以通过端口区分发送给每个端口的数据了,就是一个计算机上可以并发运行多个网络程序(在硬件上规定,端口的号码必须位于0-65535之间)

网络编程概述:

网络通讯基于“请求-响应”模型。第一次主动发起通讯的程序被称作客户端而在第一次通讯中等待连接的程序被称作服务器端。

客户端被安装在用户电脑上,服务器端程序运行在公司机房中,为用户提供服务。这种网络编程的结构被称作客户端/服务器结构,也叫做Client/Server结构,简称C/S结构。表现力丰富,但通用性差。

没有必要使用专用的客户端,而使用通用的客户端,例如浏览器,这种结构被称作浏览器/服务器结构,也叫做Browser/Server结构,简称为B/S结构。开发的压力比较小。但是表现力不强,无法进行系统级操作。

网络通讯方式

TCP(传输控制协议)方式

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

网络编程技术

网络编程步骤

客户端网络编程

服务器网络编程

客户端网络编程步骤

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

交换数据:由客户端发送一个请求数据到服务器,服务器反馈一个响应数据给客户端,如果客户端不发送请求则服务器端就不响应。

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

服务器端网络编程步骤

监听端口:服务器端属于被动等待连接,所以服务器端启动以后,不需要发起连接,而只需要监听本地计算机的某个固定端口即可。

获得连接:当客户端连接到服务器端时,服务器端就可以获得一个连接,这个连接包含客户端的信息,例如客户端IP地址等等,服务器端和客户端也通过该连接进行数据交换。

交换数据:服务器端通过获得的连接进行数据交换。接收客户端发送过来的数据,然后进行逻辑处理,再把处理以后的结果数据发送给客户端。在数据交换完成以后,关闭和客户端的连接。

关闭连接:当服务器程序关闭时,需要关闭服务器端,通过关闭服务器端使得服务器监听的端口以及占用的内存可以释放出来,实现了连接的关闭。

Java网络编程技术

InetAddress类:该类的功能是代表一个IP地址,并且将IP地址和域名相关的操作方法包含在该类的内部。

Socket类:以java.net.Socket类代表客户端连接,以java.net.ServerSocket类代表服务器端连接。

在客户端网络编程中,首先需要建立连接,在Java API中以java.net.Socket类的对象代表网络连接,所以建立客户端网络连接,也就是创建Socket类型的对象,该对象代表网络连接,示例如下:

Socket socket1 = new Socket(“192.168.1.103”,10000);


     
     Socket socket2 = new Socket(“www.sohu.com”,80)

连接一旦建立,紧接着的步骤就是按照“请求-响应”模型进行网络数据交换,在Java语言中,数据传输功能由Java IO实现,也就是说只需要从连接中获得输入流和输出流即可,然后将需要发送的数据写入连接对象的输出流中,在发送完成以后从输入流中读取数据即可。示例代码如下:

OutputStream os = socket1.getOutputStream(); //获得输出流

InputStream is = socket1.getInputStream();     //获得输入流
最后当数据交换完成以后,关闭网络连接,释放网络连接占用的系统端口和内存等资源,完成网络操作,示例代码如下:



    socket1.close();

教材中的问题及解决过程

1、22.6中使用await而没有使用wait,两者区别为?

• wait()后,线程会释放掉它所占有的“锁标志”,从而使线程所在对象中的其他shnchronized数据可被别的线程使用。

代码托管

https://git.oschina.net/bestiisjava2017/nhx20155309-Java

结对及互评

20155220 吴思其http://www.cnblogs.com/20155220wsq/p/6718224.html

错题总结及分析

1.Linux中使用rm删除文件时,如果想忽略提示,直接删除文件,可以使用()选项强制删除。
A .
-r
B .
-R
C .
-c
D .
-f
答案是d
2.Linux中使用cp命令拷贝目录时要加上()选项。
A .
-r
B .
-directory
C .
-all
D .
-R

答案是ad
3.Linux中获取当前路径的绝对路径的命令是()?
A .
cd
B .
passwd
C .
tree
D .
pwd
答案是d
4.NIO2中,可以使用()中的方法取出文件系统根目录信息。
A .
Path
B .
DirectoryStream
C .
FileStore
D .
FileSystem
答案是d
5.Java NIO中与InputStream/OutputStream相对应的接口是(),用来连接数据节点。
A .
Channel
B .
Buffer
C .
Path
D .
FileStore
答案是a
6.正则表达式 zo* 匹配()
A .
z
B .
zo
C .
zoo
D .
zooooooooooooooooooooooooooo
答案是abcd
7.正则表达式 r.t 能够匹配字符串()
A .
rat
B .
rt
C .
rut
D .
root
答案是ac
8.正则表达式“r.t”匹配字符串“rat”的Java 代码表达式是()
A .
"rat".matcher("r.t")
B .
"r.t".matcher("rat")
C .
Pattern.compile("rat").matcher("r.t")
D .
Pattern.compile("r.t").matcher("rat")
答案是d
9.Suppose we have an array of String objects identified by the variable names. Which of the following for loops will not correctly process each element in the array.(假如我们有一个名为names的String对象数组,下面哪个for循环不能遍历数组中的每一个元素?)
A .
for(int i = 0; i < names.length; i++)
B .
for(String name : names)

C .
for(int i = 0; i < names.length(); i++)

D .
none of these will correctly process each element(以上都不能遍历)
E .
all of these will correctly process each element(以上都能遍历)
答案是c
10.可以通过Logger logger = new Logger(); 来产生Logger对象。
A .
True
B .
False
答案是b

学习与感悟

不知不觉课本上的内容已经接近了尾声。但是感觉自己对于java课程的了解还只是杯水车薪。在java路上还有很长一段路要走。正如同每周的小测验就算是自己感觉掌握得很好,可是结果还是不尽如人意。所以书自己准备再翻阅一遍,希望之后自己对java的理解能更深。

学习进度条

代码行数(新增/累积)	博客量(新增/累积)	学习时间(新增/累积)	

目标 5000行 30篇 400小时
第一周 50/100 1/1 24/24
第二周 250/300 1/2 30/54
第三周 552/852 1/3 16/60
第四周 717/1569 1/4 10/70
第五周 495/2064 1/5 6/76
第六周 754/2818 1/6 7/82
第七周 679/3493 2/8 5/87
第八周 302/3795 3/8 6/90

预计学习时间6小时
实际学习时间3小时