教材学习内容总结

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

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 网络编程

参考资料

20145329《Java程序设计》第十周学习总结的更多相关文章

  1. 201521123027 <java程序设计>第十周学习总结

    1.本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结异常与多线程相关内容. 异常: 多线程: 2.书面作业 Q1.finally 题目4-2 1.1 截图你的提交结果(出现学号) 1.2 ...

  2. Java程序设计第十周学习总结

    Java课程知识梳理: 流的区分; 字符流与字节流的区别: 字节流是直接操作文件本身的,如果没有关闭字节流操作,文件会依然输出内容 而字符流在程序运行之后会发现文件没有任何的内容,这是因为字符流操作的 ...

  3. 20145213《Java程序设计》第九周学习总结

    20145213<Java程序设计>第九周学习总结 教材学习总结 "五一"假期过得太快,就像龙卷风.没有一点点防备,就与Java博客撞个满怀.在这个普天同庆的节日里,根 ...

  4. 《Java程序设计》第九周学习总结

    20145224 <Java程序设计>第九周学习总结 第十六章 整合数据库 JDBC入门 ·数据库本身是个独立运行的应用程序 ·撰写应用程序是利用通信协议对数据库进行指令交换,以进行数据的 ...

  5. 20145236 《Java程序设计》第九周学习总结

    20145236 <Java程序设计>第九周学习总结 教材学习内容总结 第十六章 整合数据库 JDBC简介 1.JDBC是java联机数据库的标准规范.它定义了一组标准类与接口,标准API ...

  6. 20155304田宜楠2006-2007-2 《Java程序设计》第一周学习总结

    20155304田宜楠2006-2007-2 <Java程序设计>第一周学习总结 教材学习内容总结 - 浏览教材,根据自己的理解每章提出一个问题 第一章 除了书上提到的开发工具还有什么适合 ...

  7. 20145237 《Java程序设计》第九周学习总结

    20145237 <Java程序设计>第九周学习总结 教材学习内容总结 第十六章 整合数据库 JDBC入门 ·数据库本身是个独立运行的应用程序 ·撰写应用程序是利用通信协议对数据库进行指令 ...

  8. 学号 20175212 《Java程序设计》第九周学习总结

    学号 20175212 <Java程序设计>第九周学习总结 教材学习内容总结 一.MySQL数据库管理系统 1.在官网上下载并安装MySQL 2.在IDEA中输入测试代码Connectio ...

  9. 20172325 2018-2019-2 《Java程序设计》第九周学习总结

    20172325 2018-2019-2 <Java程序设计>第九周学习总结 教材学习内容总结 图的定义 图是由顶点集(VertexSet)和边集(EdgeSet)组成,针对图G,顶点集和 ...

  10. 20155334 2016-2017-2 《Java程序设计》第九周学习总结

    20155334 2016-2017-2 <Java程序设计>第九周学习总结 教材学习内容总结 第十六章:整合数据库 16.1 JDBC入门 JDBC(Java DataBase Conn ...

随机推荐

  1. springboot + ApplicationListener

    ApplicationListener自定义侦听器类 @Component public class InstantiationTracingBeanPostProcessor implements ...

  2. 用angular引入复杂的json文件2

    昨天我们也说了一下angular引入复杂json文件的方法,今天我们再来学习一种方法,而且更简单,更快捷. 首先我们引入一个angular插件,并且写上引入模块和控制台,在html中书写上模块名和控制 ...

  3. Struts2中解决表单重复提交

    3. 表单的重复提交问题 1). 什么是表单的重复提交 > 在不刷新表单页面的前提下:  >> 多次点击提交按钮 >> 已经提交成功, 按 "回退" ...

  4. 升级PHP版本导致zabbix无法访问解决办法

    故障现象:无法打开zabbix首页,提示缺少zabbix.conf配置文件 原因分析:升级yum安装php版本了,升级前卸载了原PHP5.4版本导致 解决办法: 重新安装zabbix yum inst ...

  5. poj2826 An Easy Problem?!【计算几何】

    含[三点坐标计算面积].[判断两线段是否有交点].[求线段交点]模板   An Easy Problem?! Time Limit: 1000MS   Memory Limit: 65536K Tot ...

  6. Nginx 之 内存池

    1.基本结构 先来学习一下nginx内存池的几个主要数据结构:[见:./src/core/ngx_palloc.h/.c]     ngx_pool_data_t(内存池数据块结构) 1: typed ...

  7. Runtime Permission.

    http://blog.csdn.net/lmj623565791/article/details/50709663: 本文出自:[张鸿洋的博客] 一.概述 随着Android 6.0发布以及普及,我 ...

  8. Navicat连接mysql8出现1251错误

    我的博客:www.yuehan.online   因为加密方式的问题,在使用mysql8.0的时候需要修改加密规则才能连接navicat. 打开cmd,输入以下命令: ALTER USER 'root ...

  9. 记CM+kerberos环境停电后无法启动报错An error: (java.security.PrivilegedActionException: javax.security.sasl.SaslException: GSS initiate failed [Caused by GSSException: No valid credentials provided (Mechanism leve

    公司突然停电,然后cm环境无法重启,报错 An error: (java.security.PrivilegedActionException: javax.security.sasl.SaslExc ...

  10. 《闪存问题之READ DISTURB》总结

    来自 http://www.ssdfans.com/?p=1778 闪存存在几个问题,影响着数据可靠性: 1.擦除次数,闪存擦除次数增多,会使隔离栅极的电化学键变弱. 2.data retention ...