Java网络编程
1、计算机网络的概念
计算机网络就是通信线路与通信设备将分布在不同地点的具有独立功能的多个计算机系统互相连接起来,在网络软件的支持下实现彼此之间的数据通信和资源共享的系统。
2、计算机网络的划分
(1)按地理位置划分:广域网、局域网、城域网
(2)按拓扑结构划分:星形、总线形、环形
(3)按传输介质划分:同轴电缆网、双绞线网、光纤网、卫星网、无线网
(4)按通信协议划分:以太网(CSMA/CD协议)、令牌环网(令牌环协议)、Internet网(TCP/IP协议)
(5)按宽带速率划分:低速网、中速网、高速网
3、网络编程的架构
几种常用的Android网络框架:
(1)android_async_http: HTTP请求发生在UI线程之外,自动智能请求重试,优化了质量不一的移动连接,自动解码支持gzip反应速度超快的请求,持久化cookie存储,保存cookie到你的应用程序的SharedPreferences。
(2)http_request: 在小型的项目上性能表现最好,如果你的项目不是很大,这个框架是一个不错的选择。
(3)okhttp: 使用 OkHttp 无需重写你程序中的网络代码。OkHttp实现了几乎和java.net.HttpURLConnection一样的API。如果你用了 Apache HttpClient,则OkHttp也提供了一个对应的okhttp-apache 模块。
(4) retrofit: 是一个类型安全的 REST 客户端。
(5)Netroid: 一个基于 Volley 实现的Android Http库。提供执行网络请求、缓存返回结果、批量图片加载、大文件断点下载的常见Http交互功能。致力于避免每个项目重复开发基础Http功能,实现显著地缩短开发周期的愿景。
4、网络的OSI分层思想【国际标准化组织(ISO) 】
网络分层
网络分层就是将网络节点所要完成的数据的发送或转发、打包或拆包、控制信息的加载或拆出等工作,分别由不同的硬件和软件模块去完成.这样可以将往来通信和网络互连这一复杂的问题变得较为简单.
OSI(Open System Interconnection),即开放式系统互联。
ISO提出的OSI(Open System Interconnection)模型将网络分为七层,即物理层( Phisical )、数据链路层(Data Link)、网络层(Network)、传输层(Transport)、会话层(Session)、表示层(Presentation)和应用层(Application).
5、什么是网络编程?
网络编程:使用编程语言实现多台计算机的通信。
6、网络编程三要素
(1)IP地址:
(3)协议:
用生活中的例子说明:假如我要和小明说话,首先我要到小明的住址找到小明(相当于通过IP找到指定计算机);之后我要和小明说话,小明用耳朵听我说(相当于用端口接收);而我们对话不能使用鸟语,需要作出规定彼此都要使用都能听懂的普通话(这就是协议的作用了)。
IP地址
由四个字节32位的数字组成(ps:192.168.1.1),在InetAddress获取ip地址和主机名,127.0.0.l 和localhost都表示本机地址。
端口
0~1024是系统程序的端口号(ps:80 网络端口)所以在写自己程序的时候使用端口号应该是:1024~65535
协议
TCP
面向连接,三次握手
安全性高,效率低
TCP协议发送数据是没有大小限制的
UDP
无连接协议
安全性低,效率高
UDP协议发送数据的时候,用的是数据报包的形式。大小是在64KB以内
Socket 套接字
网络上具有唯一标识的IP地址和端口组合在一起才能构成唯一能识别的标识符套接字。
Socket原理机制:
1、通信的两端都有Socket
2、网络通信其实就是Socket间的通信
3、数据在两个Socket间通过IO传输
7、Java中的网络支持
针对网络通信的不同层次,Java提供了不同的API,其提供的网络功能有四大类:
InetAddress:用于标识网络上的硬件资源,主要是IP地址
URL:统一资源定位符,通过URL可以直接读取或写入网络上的数据
Sockets:使用TCP协议实现的网络通信Socket相关的类
Datagram:使用UDP协议,将数据保存在用户数据报中,通过网络进行通信
UDP协议的通信 :
发送端:
1、建立DatagramSocket对象
2、将数据封装到数据包中
3、发送数据包
4、关闭资源
接收端:
1、建立DatagramSocket对象
2、定义一个空的数据包
3、接受数据包
4、解析数据包
5、关闭资源
TCP协议的通信 (C/S模式、Socket套接字)
服务端:
1、 创建ServerSocket对象,绑定监听端口
2、 通过accept()方法监听客户端请求,等待客户端的连接,返回一个Socket对象
3、连接建立后,通过输入流向接收客服端端发送请求信息
4、 通过输入出流返回服务器响应的信息
5、关闭资源
客户端:
1、建立Socket对象, 指明需要连接的服务器的地址和端口号
2、 连接建立后,通过输出流向服务器端发送请求信息
3、 通过输入流获取服务器响应的信息
4、关闭资源