20155308 2016-2017-2 《Java程序设计》第10周学习总结
教材学习内容总结
网络概述
- 计算机网络:通过一定的物理设备将处于不同位置的计算机连接起来组成的网络,这个网络中包含的设备有:计算机、路由器、交换机等等。
- IP地址:网络中的每个设备都会有一个唯一的数字标识,命名IP地址的规定是IPv4协议,该协议规定每个IP地址由4个0-255之间的数字组成。
- 域名:一个IP地址可以对应多个域名,一个域名只能对应一个IP地址。
- 域名解析:通过DNS服务器将域名转换为IP地址。
- 端口(port):在同一个计算机中每个程序对应唯一的端口,这样一个计算机上就可以通过端口区分发送给每个端口的数据了,也就是一个计算机上可以并发运行多个网络程序,而不会在互相之间产生干扰。
网络编程概述
-
网络通讯的方式
- TCP(传输控制协议)方式
- UDP(用户数据报协议)方式
这两种传输方式都是实际的网络编程中进行使用,重要的数据一般使用TCP方式进行数据传输,而大量的非核心数据则都通过UDP方式进行传递,在一些程序中甚至结合使用这两种方式进行数据的传递。
-
网络编程技术
-
客户端的编程主要由三个步骤实现:
- 建立网络连接:建立网络连接时需要指定连接到的服务器的IP地址和端口号
- 交换数据
- 关闭网络连接
-
服务器端网络编程步骤
服务器端一般实现程序的核心逻辑以及数据存储等核心功能四个步骤:
- 监听端口
- 获得连接
- 交换数据
- 关闭连接
- Java网络编程技术:
TCP编程
- 网络通讯的方式有TCP和UDP两种,其中TCP方式的网络通讯是指在通讯的过程中保持连接,如果发送的一方发送的数据接收方觉得有问题,则网络底层会自动要求发送方重发,直到接收方收到为止。
- TCP客户端编程:
- 在客户端网络编程中,首先需要建立连接,在Java API中以java.net.Socket类的对象代表网络连接,所以建立客户端网络连接,也就是创建Socket类型的对象,该对象代表网络连接,示例如下:
Socket socket = new Socket(“192.168.1.103”,10000);
- 连接一旦建立,则完成了客户端编程的第一步,紧接着的步骤就是按照“请求-响应”模型进行网络数据交换,在Java语言中,数据传输功能由Java IO实现,也就是说只需要从连接中获得输入流和输出流即可,然后将需要发送的数据写入连接对象的输出流中,在发送完成以后从输入流中读取数据即可:
OutputStream os = socket1.getOutputStream(); //获得输出流
InputStream is = socket1.getInputStream(); //获得输入流
- 最后当数据交换完成以后,关闭网络连接,释放网络连接占用的系统端口和内存等资源,完成网络操作:
socket.close();
SimpleSocketClient.java
SimpleSocketClient.java代码运行示例如下:
- TCP服务器编程
- 在服务器端程序编程中,由于服务器端实现的是被动等待连接,所以服务器端编程的第一个步骤是监听端口,也就是监听是否有客户端连接到达:
ServerSocket ss = new ServerSocket(10000);
- 然后是获得连接,当有客户端连接到达时,建立一个和客户端连接对应的Socket连 接对象,从而释放客户端连接对于服务器端端口的占用:
Socket socket = ss.accept();
- 连接获得以后,后续的编程就和客户端的网络编程类似了,这里获得的Socket类型的连接就和客户端的网络连接一样了,只是服务器端需要首先读取发送过来的数据,然后进行逻辑处理以后再发送给客户端,也就是交换数据的顺序和客户端交换数据的步骤刚好相反。
- 最后,在服务器端通信完成以后,关闭服务器端连接:
ss.close();
代码运行示例如下:
复用连接客户端:
- 建立连接以后,将数据交换的逻辑写到一个循环中,这样只要循环不结束则连接就不会被关闭,可以用这样的方式来实现建立一次连接,进行多次数据交换。
MulSocketClient.java代码运行示例如下:
复用连接服务器:
- 按照客户端实现的逻辑,也可以复用服务器端的连接,实现的原理也是将服务器端的数据交换逻辑写在循环中。
MulSocketServer.java代码运行示例如下:
多客户端的服务器:
- 一个服务器端一般都需要同时为多个客户端提供通讯,当服务器端接收到一个连接时,启动一个专门的线程处理和该客户端的通讯,这样就可以支持多个客户端。
- MulThreadSocketServer类实现服务器端控制,实现接收客户端连接,然后开启专门的逻辑线程处理该连接,LogicThread类实现对于一个客户端连接的逻辑处理,将处理的逻辑放置在该类的run方法中。
UDP编程
UDP客户端编程:
- 建立连接
- 发送数据
- 接收数据
- 关闭连接。
SimpleUDPClient.java代码运行示例如下:
UDP服务器编程:
- 基本上也与TCP服务器编程类似,不过使用的对象不同。
SimpleUDPServer.java代码运行示例如下:
这个代码我的运行有问题,还未解决!
网络协议
- 网络协议的实质也是客户端程序和服务器端程序对于数据的一种约定,只是由于以计算机为基础,所以更多的是使用数字来代表内容,这样就显得比较抽象一些。
- 客户端程序需要完成的处理为:
- 客户端发送协议格式的生成
- 服务器端反馈数据格式的解析
- 服务器端程序需要完成的处理为:
- 服务器端反馈协议格式的生成
- 客户端发送协议格式的解析
质数判别示例
- 客户端程序功能:
- 接收用户控制台输入
- 判断输入内容是否合法
- 按照协议格式生成发送数据
- 发送数据
- 接收服务器端反馈
- 解析服务器端反馈信息,并输出
代码运行示例如下:
- 服务器端程序功能:
- 接收客户端发送数据
- 按照协议格式解析数据
- 判断数字是否是质数
- 根据判断结果,生成协议数据
- 将数据反馈给客户端
代码运行示例如下:
猜数字小游戏
- 客户端程序功能列表:
- 接收用户控制台输入
- 判断输入内容是否合法
- 按照协议格式发送数据
- 根据服务器端的反馈给出相应提示
- 服务器端程序功能列表:
- 接收客户端发送数据
- 按照协议格式解析数据
- 判断发送过来的数字和随机数字的关系
- 根据判断结果生产协议数据
- 将生产的数据反馈给客户端