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();
• 服务器端是对话一次数据以后就关闭了连接,如果服务器端程序关闭了,客户端继续发送数据肯定会出现异常。
- 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程序设计》第十周学习总结的更多相关文章
- 201521123027 <java程序设计>第十周学习总结
1.本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结异常与多线程相关内容. 异常: 多线程: 2.书面作业 Q1.finally 题目4-2 1.1 截图你的提交结果(出现学号) 1.2 ...
- Java程序设计第十周学习总结
Java课程知识梳理: 流的区分; 字符流与字节流的区别: 字节流是直接操作文件本身的,如果没有关闭字节流操作,文件会依然输出内容 而字符流在程序运行之后会发现文件没有任何的内容,这是因为字符流操作的 ...
- 20145213《Java程序设计》第九周学习总结
20145213<Java程序设计>第九周学习总结 教材学习总结 "五一"假期过得太快,就像龙卷风.没有一点点防备,就与Java博客撞个满怀.在这个普天同庆的节日里,根 ...
- 《Java程序设计》第九周学习总结
20145224 <Java程序设计>第九周学习总结 第十六章 整合数据库 JDBC入门 ·数据库本身是个独立运行的应用程序 ·撰写应用程序是利用通信协议对数据库进行指令交换,以进行数据的 ...
- 20145236 《Java程序设计》第九周学习总结
20145236 <Java程序设计>第九周学习总结 教材学习内容总结 第十六章 整合数据库 JDBC简介 1.JDBC是java联机数据库的标准规范.它定义了一组标准类与接口,标准API ...
- 20155304田宜楠2006-2007-2 《Java程序设计》第一周学习总结
20155304田宜楠2006-2007-2 <Java程序设计>第一周学习总结 教材学习内容总结 - 浏览教材,根据自己的理解每章提出一个问题 第一章 除了书上提到的开发工具还有什么适合 ...
- 20145237 《Java程序设计》第九周学习总结
20145237 <Java程序设计>第九周学习总结 教材学习内容总结 第十六章 整合数据库 JDBC入门 ·数据库本身是个独立运行的应用程序 ·撰写应用程序是利用通信协议对数据库进行指令 ...
- 学号 20175212 《Java程序设计》第九周学习总结
学号 20175212 <Java程序设计>第九周学习总结 教材学习内容总结 一.MySQL数据库管理系统 1.在官网上下载并安装MySQL 2.在IDEA中输入测试代码Connectio ...
- 20172325 2018-2019-2 《Java程序设计》第九周学习总结
20172325 2018-2019-2 <Java程序设计>第九周学习总结 教材学习内容总结 图的定义 图是由顶点集(VertexSet)和边集(EdgeSet)组成,针对图G,顶点集和 ...
- 20155334 2016-2017-2 《Java程序设计》第九周学习总结
20155334 2016-2017-2 <Java程序设计>第九周学习总结 教材学习内容总结 第十六章:整合数据库 16.1 JDBC入门 JDBC(Java DataBase Conn ...
随机推荐
- PHP array_merge() 函数
<?php $a1=array("a"=>"red","b"=>"green"); $a2=array ...
- servlet容器与web容器的概念
一般的说法是这样的,servlet容器的主要任务是管理servlet的生命周期.而web容器更准确的说应该叫web服务器,它是来管理和部署 web应用的.还有一种服务器叫做应用服务器,它的功能比web ...
- netty 网关 flume 提交数据 去除透明 批处理 批提交 cat head tail 结合 管道显示行号
D:\javaNettyAction\NettyA\src\main\java\com\test\HexDumpProxy.java package com.test; import io.netty ...
- jquery.easing的使用
下载地址:http://www.jb51.net/jiaoben/32922.html 基本语法:easing:格式为json,{duration:持续时间,easing:过渡效果,complete: ...
- Apache Samza - Reliable Stream Processing atop Apache Kafka and Hadoop YARN
http://engineering.linkedin.com/data-streams/apache-samza-linkedins-real-time-stream-processing-fram ...
- linux环境下的python安装过程
一.下载python源码包 打开ubuntu下的shell终端,通过wget命令下载python源码包,如下图所示: wget https://www.python.org/ftp/python/3. ...
- SIP中的 session, dialog 及 transaction 的解释
http://stackoverflow.com/questions/35133331/difference-between-session-dialog-and-transaction-in-sip ...
- 深入理解Flink核心技术(转载)
作者:李呈祥 Flink项目是大数据处理领域最近冉冉升起的一颗新星,其不同于其他大数据项目的诸多特性吸引了越来越多的人关注Flink项目.本文将深入分析Flink一些关键的技术与特性,希望能够帮助读者 ...
- Java应用程序中System.out.println输出中文乱码
其实,解决办法比较简单,即:编译时指定编码为UTF-8,如: javac -encoding utf- HelloJava.java 这样,再运行时就不会出现乱码. 比较详细的内容可以参考:http: ...
- 如何将apk安装在模拟器上面
1.运行SDK Manager,选择模拟器,并运行模拟器 2.将需要安装的apk文件复制到platform-tools目录下(默认在:C:\Program Files\Android\android- ...