java学习笔记(基础篇)—网络
一:计算机网络
计算机网络是连接全球计算机资源的网络环境可以资源共享,通信等最简单的网络形式由两台计算机组成。
二:网络的协议
协议:在网络上进行数据通信(数据交换)时所使用的规范(标准)。不同层具有各自不同的协议。
三:osi(open system interconnection)参考模型
物理层:二进制传输,确定如何在通信信道上传递比特流;
数据链路层:加强物理层的传输功能,建立一条无差错的传输线路;
网络层:在网络中数据到达目的地有很多线路,网络层就是负责找出最佳的传输路;
传输层:传输层为源端计算机到目的端计算机提供可靠的数据传输服务,隔离网络的上下层协议,使得上层网络应用的协议与下层无关;
会话层:在两个相互通信的应用进程之间建立、 组织和协调其相互之间的通信;
表示层:处理被传送数据的表示问题,也就是信息的语法和语义,如有必要将使用一种通用的格式在多种格式中进行转换;
应用层:为用户的应用程序提供网络通信服务;
osi(open system interconnection)参考模型并不是物理实体上存在这七层,这只是功能的划分,是一个抽象的参考模型。进行网络通信时,每层提供本层对应的功能;
1)通信实体的对等层之间不允许直接通信,
它们之间是虚拟通信,实际通信在最底层完成;
2)各层之间是严格单向依赖;
3)上层使用下层提供的服务 — service user;
4)下层向上层提供服务 — service provider。
5)对等层实体之间虚拟通信;
6)下层向上层提供服务,实际通信在最底层完成。
osi各层所使用的协议
1)应用层:远程登录协议telnet、文件传输协议ftp(网上下载一个软件或者资料的时候就会使用该协议)、 超文本传输协议http(使用较多,通过ie浏览一个网页的时候就使用该协议)、域名服务dns(使用较多,通过网络访问一个计算机一般不使用该主机的ip地址,而是通过该主机的域名访问)、简单邮件传输协议smtp(通过foxmail发送邮件)、邮局协议pop3等(通过foxmail收邮件);
2)传输层:传输控制协议tcp、用户数据报协议udp;
tcp:面向连接的可靠的传输协议;在利用tcp协议进行通信的时候,首先要经过三步握手建立起通信双方的连接,一旦连接建立后就可以通信了。tcp协议提供数据确认和重传的机制,保证数据一定能够到达数据接收端。像打电话。
udp:是无连接的,不可靠的传输协议;采用udp协议进行通信时,不需要建立连接,可以直接向一个ip地址发送数据,至于是不是能够收到不能保证,发送过程中数据有可能丢失、ip地址可能不存在、再者ip地址代表的主机没有运行等原因都可能导致不能接收到数据。
tcp/ip:有保障,成本较高。是一种可靠的协议,通信之前先建立连接。适合较小的数据量,保障通信质量。
如:上传和下载文件。
udp:无保障,通信成本较低。是一种不可靠的协议,通信之前不会建立连接,发数据包中包含目的地的地址。适合于大数据量,不介意丢失少量数据的通信。
如:视频聊天
3)网络层:网际协议ip、internet互联网控制报文协议icmp、internet组管理协议igmp。
四:ip地址和端口号
ip地址:最重要的路由寻址
1)网络中每台主机都必须有一个惟一的ip地址;
2)ip地址是一个逻辑地址;
3)因特网上的ip地址具有全球唯一性;
4)32位,4个字节,常用点分十进制的格式表示,例如:192.168.0.16。
端口:用来标识唯一的应用程序使用一个16位的数字来表示,它的范围是0--65535
,1024以下的端口号保留给预定义的服务。例如:23-telnet,21-ftp,25-邮件传输,http使用80端口
五:基于tcp的socket编程步骤:
套接字:代表通信节点
1)服务器程序编写:
①调用serversocket(int port)创建一个服务器端套接字,并绑定到指定端口上;
②调用accept(),监听连接请求,如果客户端请求连接,则接受连接,返回通信 套接字;
③调用socket类的getoutputstream()和getinputstream获取输出流和输入流, 开始网络数据的发送和接收;
④最后关闭通信套接字。
2)客户端程序编写:
①调用socket()创建一个流套接字,并连接到服务器端;
②调用socket类的getoutputstream()和getinputstream获取输出流和输入流, 开始网络数据的发送和接收;
③最后关闭通信套接字。
六:基于udp的socket编程步骤:
1)服务器端基于udp编程:
a)调用datagramsocket(int port)创建一个数据报套接字,并绑定到指定端口上;
b)调用datagrampacket(byte[] buf, int length),建立一个字节数组以接收客户端 的udp包 ;
c)调用datagramsocket类的receive(),接收客户端的udp包并放在上一步创建的 数据包中; 通过调用datagrampacket的getdata获取数据。
d)创建数据包,用来存放发送给客户端响应数据。
int port = dp.getport(); inetaddress address=dp.getaddress(); string msg=new date().tostring(); buf=msg.getbytes(); datagrampacket dp1=new datagrampacket(buf,buf.length,address,port);
e)向客户端发送数据包datagramsocket.send(datagrampacket)
f)最后关闭数据报套接字。其中第四,五是选择性的。
2)客户端程序编写:
a)调用datagramsocket()创建一个数据报套接字。
b)调用datagrampacket(byte[] buf, int length,
inetaddress address, int port),建立要发送的udp包;
包含发给服务器的数据,服务器地址,服务器的端口。
c)调用datagramsocket类的send(dp),发送udp包;
d)创建数据包,用来存放服务器端返回响应数据。
datagrampacket dp1=new datagrampacket(buf,buf.length);
e)接收服务器端响应数据ds.receive(dp1);
f)最后关闭数据报套接字。
其中第四,五是选择性的。
七、概念
uri:统一资源标识符
url:统一资源定位符
urn:统一资源命名符
喜欢我就关注我的公众号吧~
上一篇: 安卓GET与POST网络请求的三种方式
下一篇: Android UI开发中所遇到的各种坑
推荐阅读
-
js零基础快速学习教程(知识与语法整理笔记)
-
7.1(java学习笔记)InetAddress&InetScoketAddress
-
Python学习笔记(一)(基础入门之环境搭建)
-
python网络编程学习笔记(10):webpy框架
-
python网络编程学习笔记(六):Web客户端访问
-
python网络编程学习笔记(八):XML生成与解析(DOM、ElementTree)
-
python网络编程学习笔记(五):socket的一些补充
-
python网络编程学习笔记(七):HTML和XHTML解析(HTMLParser、BeautifulSoup)
-
python网络编程学习笔记(四):域名系统
-
python网络编程学习笔记(三):socket网络服务器