20145329《Java程序设计》第十周学习总结

教材学习内容总结

网络编程
• 网络编程就是在两个或两个以上的设备(例如计算机)之间传输数据。程序员所作的事情就是把数据发送到指定的位置,或者接收到指定的数据

1.网络概述

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

• 计算机网络:通过一定的物理设备将处于不同位置的计算机连接起来,这个网络中包含的设备有:计算机、路由器、交换机等等,路由器和交换机组成了核心的计算机网络。

•IP地址:为了能够方便的识别网络上的每个设备,网络中的每个设备都会有一个唯一的数字标识,这个就是IP地址,计算机在联网以后都拥有一个唯一的合法IP地址,就像每个手机号码一样。

• 域名:一个IP地址可以对应多个域名,一个域名只能对应一个IP地址。

• DNS服务器(域名解析):在网络中传输的数据,全部是以IP地址作为地址标识,所以在实际传输数据以前需要将域名转换为IP地址,实现这种功能的服务器称之为DNS服务器,也就是通俗的说法叫做域名解析。

• 端口:计算机上通过端口区分发送给每个端口的数据了,端口的号码必须位于0-65535之间,每个端口唯一的对应一个网络程序,一个网络程序可以使用多个端口。

2.网络编程概述

• 网络编程:两个或多个设备之间的数据交换,网络编程是两个或多个程序之间的数据交换,需要交换数据的程序运行在不同的计算机上。
• 客户端与服务器:在网络通讯中,第一次主动发起通讯的程序被称作客户端(Client)程序,简称客户端,而在第一次通讯中等待连接的程序被称作服务器端(Server)程序,简称服务器。
• 服务器结构:(1)客户端/服务器结构,也叫做Client/Server结构,简称C/S结构。(2)用浏览器作为客户端的结构被称作浏览器/服务器结构,也叫做Browser/Server结构,简称为B/S结构,B/S结构其实也就是一种特殊的C/S结构。
• 协议:对于网络中传输的数据格式在网络编程中就被称作协议。

3.网络通讯方式

• 两种主要的网络通讯方式:
(1) TCP(传输控制协议)方式:
TCP方式就类似于拨打电话,需要建立专门的虚拟连接,然后进行可靠的数据传输,如果数据发送失败,则客户端会自动重发该数据
(2) UDP(用户数据报协议)方式:
类似于发送短信,使用这种方式进行网络通讯时,不需要建立专门的虚拟连接,传输也不是很可靠,如果发送失败则客户端无法获得。

网络编程技术
1.网络编程步骤
• 客户端网络编程步骤
(1) 建立网络连接
(2) 交换数据
(3) 关闭网络连接

• 服务器端网络编程步骤
(1) 监听端口
(2) 获得连接
(3) 交换数据
(4) 关闭连接

2.Java网络编程技术

• 网络编程的基础:和网络编程有关的基本API位于java.net包中,该包中包含了基本的网络编程实现。
• InetAddress类:基础的网络类,代表一个IP地址,并且将IP地址和域名相关的操作方法包含在该类的内部。
(1)使用域名创建对象:
InetAddress inet1 = InetAddress.getByName("www.163.com");
(2)使用IP创建对象
InetAddress inet2 = InetAddress.getByName("127.0.0.1");
(3)获得本机地址对象
InetAddress inet3 = InetAddress.getLocalHost();
(4)获得对象中存储的域名
String host = inet3.getHostName();
(5)获得对象中存储的IP
String ip = inet3.getHostAddress();

3.TCP编程

• TCP方式的网络编程:在实际实现时,以java.net.Socket类代表客户端连接,以java.net.ServerSocket类代表服务器端连接。

• 实现步骤:
(1)建立客户端网络连接,也就是创建Socket类型的对象
Socket socket1 = new Socket(“192.168.1.103”,10000);
(2)按照“请求-响应”模型进行网络数据交换
OutputStream os = socket1.getOutputStream(); //获得输出流
InputStream is = socket1.getInputStream(); //获得输入流
(3)关闭网络连接:
socket1.close();

• 实现服务器端监听的代码为:
ServerSocket ss = new ServerSocket(端口号);
• 实现获得连接的代码是:
Socket socket = ss.accept();
• 关闭服务器端连接:
ss.close();

• 服务器端是对话一次数据以后就关闭了连接,如果服务器端程序关闭了,客户端继续发送数据肯定会出现异常。

  1. UDP编程

• 在Java API中,实现UDP方式的编程,包含客户端网络编程和服务器端网络编程,主要由两个类实现,分别是:
(1)DatagramSocket
DatagramSocket类实现“网络连接”,包括客户端网络连接和服务器端网络连接。
(2)DatagramPacket
DatagramPacket类实现对于网络中传输的数据封装,也就是说,该类的对象代表网络中交换的数据。
• 实现步骤:
(1)建立连接
DatagramSocket ds = new DatagramSocket();
(2)发送数据
ds.send(sendDp);
(3)接收数据
ds.receive(receiveDp);
(4)关闭连接
ds.close();

• 获得客户端的IP
InetAddress clientIP = receiveDp.getAddress();

• 获得客户端的端口号
Int clientPort = receiveDp.getPort();

需要特别指出的是UDP方式的网络编程由于不建立虚拟的连接,所以在实际使用时和TCP方式存在很多的不同,最大的一个不同就是“无状态”。该特点指每次服务器端都收到信息,但是这些信息和连接无关,换句话说,也就是服务器端只是从信息是无法识别出是谁发送的,这样就要求发送信息时的内容需要多一些,这个在后续的示例中可以看到。

网络协议

• 两个网络协议格式:客户端发送数据格式和服务器端反馈数据格式。

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

1.质数判别示例

• (1)客户端程序功能:
a)接收用户控制台输入
b)判断输入内容是否合法
c)按照协议格式生成发送数据
d)发送数据
e)接收服务器端反馈
f)解析服务器端反馈信息,并输出
(2)服务器端程序功能:
a)接收客户端发送数据
b)按照协议格式解析数据
c)判断数字是否是质数
d)根据判断结果,生成协议数据
e)将数据反馈给客户端
• 客户端发送协议格式:将用户输入的数字转换为字符串,再将字符串转换为byte数组即 可。客户端发送“quit”字符串代表结束连接。
服务器端发送协议格式:
反馈数据长度为1个字节。数字0代表是质数,1代表不是质数,2代表协议格式错误。

2.猜数字小游戏
• (1)客户端程序功能列表:
a)接收用户控制台输入
b)判断输入内容是否合法
c)按照协议格式发送数据
d)根据服务器端的反馈给出相应提示
e)接收服务器端反馈
f)解析服务器端反馈信息,并输出
(2)服务器端程序功能列表:
a)接收客户端发送数据
b)按照协议格式解析数据
c)判断发送过来的数字和随机数字的关系
d)根据判断结果生产协议数据
e)将生产的数据反馈给客户端

• 客户端程序协议格式如下:

1、 将用户输入的数字转换为字符串,然后转换为byte数组
2、 发送“quit”字符串代表退出

• 服务器端程序协议格式如下:

1、 反馈长度为1个字节,数字0代表相等(猜中),1代表大了,2代表小了,其它数字代表错误。

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

UDP编程与TCP编程的区别及优缺点
udp协议于tcp协议最本质的区别是:udp不基于连接,tcp基于连接;简单的说就是通信双方是否在自己的机器上保持对方身份的记录,tcp保持,udp不保持。
udp适合传输数据内容不太敏感,丢失、误传影响不大的工作,例如局域网聊天、设备发现;tcp范围就太广了,凡是应用规模大点、网络环境恶劣点的应用都需要,例如ftp、网管、下载软件等。
另外在网络环境相同的情况下,使用默认的tcp和udp协议时,网络好udp的效率高一些,而网络不好tcp的稳定性高一些。

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

本周代码托管截图

感悟

感觉java的学习道路上又迈上了一个新台阶,学会了就很有趣,但是在学习的过程中确实需要很多的耐心,毕竟在还不知道它的具体的内容和用途的时候,要枯燥的学习它的一些定义和功能是很烦人的,还需要努力~

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 30篇 400小时
第一周 50/50 2/2 20/20 实现“HelloWorld”
第二周 100/150 2/4 20/20 学会用IDEA编写代码
第三周 100/250 2/6 20/20 掌握更多的语法知识
第四周 150/400 1/7 20/20 学会用Git托管代码
第五周 150/550 1/8 20/20 掌握更多的语法知识
第六周 550/1100 1/9 20/20 掌握更多的语法知识
第七周 100/1200 1/10 20/20 时间日期
第八周 100/1300 1/11 10/10 通用API
第九周 100/1400 1/12 20/20 数据库
第十周 0/1400 1/13 10/10 网络编程

参考资料

posted @ 2016-05-08 14:34  20145329吉东云  阅读(115)  评论(1编辑  收藏  举报