教材学习内容总结

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

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. LAMP集群项目五 nfs存储的数据实时同步到backupserver

    tar fxzsersync2.5.4_64bit_binary_stable_final.tar.gz -C /usr/local/ mv GNU-Linux-x86 sersync cp sers ...

  2. nexus的pom配置

    <groupId>com .sms</groupId><artifactId>sms </artifactId><packaging>pom ...

  3. Linuxyum源切换阿里云软件源

    备份本机软件源 mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup 下载新的CentOS-Bas ...

  4. -bash: xxx: /bin/sh^M: bad interpreter: No such file or directory

    原因是shell脚本文件的文件格式错误 通过vi编辑器来查看文件的format格式.步骤如下: 1.首先用vi命令打开文件 vi stop.sh 2.在vi命令模式中使用 :set ff 命令 可以看 ...

  5. Python--比较两个字典部分value是否相等

    # 比较两个字典部分是否相等def compare_two_dict(dict1, dict2, key_list): flag = True keys1 = dict1.keys() keys2 = ...

  6. Python全栈day21(调用模块路径BASEDIR的正确方法)

    正常写python程序会有一个可执行的bin.py文件,假如这个文件需要导入my_module里面定义的模块,应该怎么设置sys.path 文件夹目录结构如下,因为bin不在与my_module同级目 ...

  7. Code Forces 21 A(模拟)

    A. Jabber ID time limit per test 0.5 second memory limit per test 256 megabytes input standard input ...

  8. 微信开发 获取用户openId 与路由控制

    w实践,满足当前需求. www.w.com www.w.com/w1.php $wxurl='https://open.weixin.qq.com/connect/oauth2/authorize?a ...

  9. org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter cannot be cast to javax.servlet.Filter

    org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter cannot be cast to javax.servle ...

  10. 聚币网API[Python3版]

    代码 #!/usr/bin/env python # -*- coding:utf-8 -*- import hashlib import requests import time import ur ...