20155239 2016-2017-2 《Java程序设计》第10周学习总(2017-04-22 16:26
教材学习
1.基本概念划分
OIS的七层协议:
应用层、表示层、会话层、运输层、网络层、数据链路层、物理层。
OIS的五层协议:
应用层、运输层、网络层、数据链路层、物理层。
由下往上介绍如下:
2.物理层
特性:机械特性、电气特性、功能特性、过程特性。
数据通信系统:源系统(或发送端、发送方)、传输系统(或传输网络)和目的系统(或接受端、接受方)
源系统:
源点:源点设备产生要传输的数据。源点又称为源站或者信源
发送器:通常,源点生成的数字比特流要通过发送器编码后才能够在传输系统进行传输。典型的发送器就是调制器。现在很多PC实用内置的调制解调器。
目的系统:
接收器:接受传输系统传送过来的信号,并把它转换为能够被目的设备处理的信息。典型的接收器就是解调器,它把来自传输路线上的模拟信号进行解调,提取出在发送端置入的信息,还原出发送端产生的数字比特流。
终点:终点设备从接收器获取传送来的数字比特流,然后把信息输出。终点又称目的站,或信宿
信号:模拟信号(连续信号)、数字信号(离散信号)
通信方式:单向通信(单工通信)、双向交替通信(半双工通信)、双向同时通信(双全工通信)
香农公式:信道的极限信息传输速率C为:
C=B log2(1+S/N)
式中:B是信道带宽(赫兹),S是信号功率(瓦),N是噪声功率(瓦)。该式即为著名的香农公式,显然,信道容量与信道带宽成正比,同时还取决于系统信噪比以及编码技术种类香农定理指出,如果信息源的信息速率R小于或者等于信道容量C,那么,在理论上存在一种方法可使信息源的输出能够以任意小的差错概率通过信道传输。该定理还指出:如果R>C,则没有任何办法传递这样的信息,或者说传递这样的二进制信息的差错率为1/2。
信道的带宽或信道中的信噪比越大,信息的极限传输速率就越高。
物理层下面的传输媒体
传输媒体可分为两大类:导引型传输媒体(有线传输铜线或者光纤)和非导引型传输媒体(自由空间,无线传输)
点对点协议PPP(高级数据链路控制HDLC)
1.PPP协议满足的需求
(1)简单
(2)封装成帧
(3)透明性
(4)多种网络层协议
在同一物理链路上同事支持多种网络协议
(5)多种类型的链路
(6)差错检测
(7)检测链接状态
(8)最大传送单元
(9)网络层地址协商
(10)数据压缩协议
2.PPP协议的组成
(1)一个将IP数据报封装到串行链路的方法。PPP既支持异步链路(无奇偶检测的8比特数据),也支持面向比特的同步链路。IP数据报在平PPP帧中就是其信息部分。这个信息部分的长度受最大传送单元MTU的限制。
(2)一个用来建立、配置和测试数据链路的链路控制协议LCP。
(3)一套网络控制协议NCP,其中的每一个协议支持不同的网络层协议,如IP、OSI的网络层。。。。
PPP帧首部和尾部分别为四个字段和两个字段
3.PPP协议的工作状态
链路的发送响应:
(1)配置确认帧(Configure-Ack):所有的选项都接受。
(2)配置否认帧(Configure-Nak):所有选项都理解但是不接受。
(3)配置拒绝帧(Configure-Reject):选项有的无法识别或不能接受,需要协商。
口令鉴别协议PAP(Password Authentication Protocol).口令握手鉴别协议CHAP(Challenge-Handshake Authentication Protocol).
4.使用广播信道的数据链路层
1.局域网的数据链路层
星形网、环形网、总线网。
共享信道分为两种:
(1)静态划分信道
(2)动态媒体接入控制,又称为多点接入。
随机接入 所有的用户可随机的发送信息
受控接入 用户不能随机的发送信息必须服从一定的控制。
2.CSMA/CD协议
CSMA/CD协议的要点。:
多点接入
载波监听 不管在发送前,还是发送中,每个站都必须不停的检测信道。
电磁波在1km电缆的传播时延约为5us
一个站不可能同时进行发送和接受(但必须边发送边监听信道)。因此使用CSMA/CD协议的以太网不可能进行全双工通信而只能进行双向交替通信(半双工通信)。
以太网使用截断二进制指数退避算法来确定碰撞后重传的时机。
凡是长度小于64字节的帧都是由于冲突而异常终止的无效帧。以太网还规定了帧间最小间隔为9.6us,相当于96比特时间。
三,基于Socket的java网络编程
1,什么是Socket
网络上的两个程序通过一个双向的通讯连接实现数据的交换,这个双向链路的一端称为一个Socket。Socket通常用来实现客户方和服务方的连接。Socket是TCP/IP协议的一个十分流行的编程界面,一个Socket由一个IP地址和一个端口号唯一确定。
但是,Socket所支持的协议种类也不光TCP/IP一种,因此两者之间是没有必然联系的。在Java环境下,Socket编程主要是指基于TCP/IP协议的网络编程。
2,Socket通讯的过程
Server端Listen(监听)某个端口是否有连接请求,Client端向Server 端发出Connect(连接)请求,Server端向Client端发回Accept(接受)消息。一个连接就建立起来了。Server端和Client 端都可以通过Send,Write等方法与对方通信。
对于一个功能齐全的Socket,都要包含以下基本结构,其工作过程包含以下四个基本的步骤:
(1) 创建Socket;
(2) 打开连接到Socket的输入/出流;
(3) 按照一定的协议对Socket进行读/写操作;
(4) 关闭Socket.(在实际应用中,并未使用到显示的close,虽然很多文章都推荐如此,不过在我的程序中,可能因为程序本身比较简单,要求不高,所以并未造成什么影响。)
3,创建Socket
创建Socket
java在包java.net中提供了两个类Socket和ServerSocket,分别用来表示双向连接的客户端和服务端。这是两个封装得非常好的类,使用很方便。其构造方法如下:
Socket(InetAddress address, int port);
Socket(InetAddress address, int port, boolean stream);
Socket(String host, int prot);
Socket(String host, int prot, boolean stream);
Socket(SocketImpl impl)
Socket(String host, int port, InetAddress localAddr, int localPort)
Socket(InetAddress address, int port, InetAddress localAddr, int localPort)
ServerSocket(int port);
ServerSocket(int port, int backlog);
ServerSocket(int port, int backlog, InetAddress bindAddr)
其中address、host和port分别是双向连接中另一方的IP地址、主机名和端 口号,stream指明socket是流socket还是数据报socket,localPort表示本地主机的端口号,localAddr和 bindAddr是本地机器的地址(ServerSocket的主机地址),impl是socket的父类,既可以用来创建serverSocket又可 以用来创建Socket。count则表示服务端所能支持的最大连接数。例如:学习视频网 http://www.xxspw.com
Socket client = new
Socket("127.0.01.", 80);
ServerSocket server = new erverSocket(80);
注意,在选择端口时,必须小心。每一个端口提供一种特定的服务,只有给出正确的端口,才 能获得相应的服务。0~1023的端口号为系统所保留,例如http服务的端口号为80,telnet服务的端口号为21,ftp服务的端口号为23, 所以我们在选择端口号时,最好选择一个大于1023的数以防止发生冲突。
在创建socket时如果发生错误,将产生IOException,在程序中必须对之作出处理。所以在创建Socket或ServerSocket是必须捕获或抛出例外。
教材学习问题
java.net.SocketException四大异常解决方案
java.net.BindException:Address already in use: JVM_Bind。
该异常发生在服务器端进行new ServerSocket(port)(port是一个0,65536的整型值)操作时。异常的原因是以为与port一样的一个端口已经被启动,并进行监听。此时用netstat –an命令,可以看到一个Listending状态的端口。只需要找一个没有被占用的端口就能解决这个问题。
2.java.net.SocketException: Connection refused: connect。
该异常发生在客户端进行 new Socket(ip, port)操作时,该异常发生的原因是或者具有ip地址的机器不能找到(也就是说从当前机器不存在到指定ip路由),或者是该ip存在,但找不到指定的端口进行监听。出现该问题,首先检查客户端的ip和port是否写错了,如果正确则从客户端ping一下服务器看是否能ping通,如果能ping通(服务服务器端把ping禁掉则需要另外的办法),则看在服务器端的监听指定端口的程序是否启动,这个肯定能解决这个问题。
3.java.net.SocketException: Socket is closed,
该异常在客户端和服务器均可能发生。异常的原因是己方主动关闭了连接后(调用了Socket的close方法)再对网络连接进行读写操作。
代码托管
上周考试错题总结
错题1及原因,理解情况
错题2及原因,理解情况
...
结对及互评
评分标准
正确使用Markdown语法(加1分):
不使用Markdown不加分
有语法错误的不加分(链接打不开,表格不对,列表不正确...)
排版混乱的不加分
模板中的要素齐全(加1分)
缺少“教材学习中的问题和解决过程”的不加分
缺少“代码调试中的问题和解决过程”的不加分
代码托管不能打开的不加分
缺少“结对及互评”的不能打开的不加分
缺少“上周考试错题总结”的不能加分
缺少“进度条”的不能加分
缺少“参考资料”的不能加分
教材学习中的问题和解决过程, 一个问题加1分
代码调试中的问题和解决过程, 一个问题加1分
本周有效代码超过300分行的(加2分)
一周提交次数少于20次的不加分
其他加分:
周五前发博客的加1分
感想,体会不假大空的加1分
排版精美的加一分
进度条中记录学习时间与改进情况的加1分
有动手写新代码的加1分
课后选择题有验证的加1分
代码Commit Message规范的加1分
错题学习深入的加1分
点评认真,能指出博客和代码中的问题的加1分
结对学习情况真实可信的加1分
扣分:
有抄袭的扣至0分
代码作弊的扣至0分
迟交作业的扣至0分
点评模板:
博客中值得学习的或问题:
xxx
xxx
...
代码中值得学习的或问题:
xxx
xxx
...
基于评分标准,我给本博客打分:XX分。得分情况如下:xxx
参考示例
结对及互评
点评过的同学博客和代码
本周结对学习情况
20155239