失效链接处理 |
Java基础篇:网络编程 PDF 下载
本站整理下载:
相关截图:
主要内容:
概述 Java是 Internet 上的语言,它从语言级上提供了对网络应用程序的支
持,程序员能够很容易开发常见的网络应用程序
Java提供的网络类库,可以实现无痛的网络连接,联网的底层细节被
隐藏在 Java 的本机安装系统里,由 JVM 进行控制。并且 Java 实现了
一个跨平台的网络库,程序员面对的是一个统一的网络编程环境。
实现网络通信需要解决的两个问题
a. 如何准确地定位网络上一台或多台主机;定位主机上的特
定的应用
b. 找到主机后如何可靠高效地进行数据传输
网络通信的两个要素:
a. IP和端口号
b. 提供网络通信协议:TCP/IP参考模型(应用层、传输层、
网络层、物理+数据链路层)
通信要素之一:IP和端口号 IP的理解
a. IP:唯一的标识 Internet 上的计算机(通信实体)
b. 在Java中使用InetAddress类代表IP c. IP分类:IPv4 和 IPv6 ; 万维网 和 局域网
d. 域名: www.baidu.com www.mi.com www.sina.com www.j d.com e. 域名解析:域名容易记忆,当在连接网络时输入一个主机
的域名后,域名服务器(DNS)负责将域名转化成IP地址,这
样才能和主机建立连接。 -------域名解析
f. 本地回路地址:127.0.0.1 对应着:localhost InetAddress类:此类的一个对象就代表着一个具体的IP地址
a. 实例化:getByName(String host) 、 getLocalHost() b. 常用方法:getHostName() / getHostAddress()
端口号:正在计算机上运行的进程
a. 要求:不同的进程不同的端口号
b. 范围:被规定为一个 16 位的整数 0~65535 c. 端口分类:
i. 公认端口:0~1023。被预先定义的服务通信占用
(如:HTTP占用端口80,FTP占用端口21, Telnet占用端口23) ii. 注册端口:1024~49151。分配给用户进程或应用
程序。(如:Tomcat占用端口8080,MySQL占
用端口3306,Oracle占用端口1521等)
iii. 动态/私有端口:49152~65535 d. 端口号与IP地址的组合得出一个网络套接字:Socket InetAdress 代码示例 public static void main(String[] args) { try { 12
通信要素之二:网络协议
网络通信协议
计算机网络中实现通信必须有一些约定,即通信协议,对速率、传输
代码、代码结构、传输控制步骤、出错控制等制定标准。
问题:网络协议太复杂
计算机网络通信涉及内容很多,比如指定源地址和目标地址,加密解
密,压缩解压缩,差错控制,流量控制,路由控制,如何实现如此复
杂的网络协议呢?
通信协议分层的思想
在制定协议时,把复杂成份分解成一些简单的成份,再将它们复合起
来。最常用的复合方式是层次方式,即同层间可以通信、上一层可以
调用下一层,而与再下一层不发生关系。各层互不影响,利于系统的
开发和扩展。
TCP/IP协议簇
传输层协议中有两个非常重要的协议:
a. 传输控制协议TCP(Transmission Control Protocol) b. 用户数据报协议UDP(User Datagram Protocol) InetAddress inet1 = InetAddress.getByName("202.89.233.101"); System.out.println(inet1);// /202.89.233.101 InetAddress inet2 = InetAddress.getByName("cn.bing.com"); System.out.println(inet2);// cn.bing.com/202.89.233.101 InetAddress inet3 = InetAddress.getByName("127.0.0.1"); System.out.println(inet3);// /127.0.0.1 //获取本地ip InetAddress inet4 = InetAddress.getLocalHost(); System.out.println(inet4);// M-XX- GULJ/192.168.110.1 System.out.println(inet2.getHostName());// cn.bing.com System.out.println(inet2.getHostAddress());// 202.89.233.101 } catch (UnknownHostException e) { e.printStackTrace(); } } 345678910111213141516171819202122
TCP/IP 以其两个主要协议:传输控制协议(TCP)和网络互联协议(IP)
而得名,实际上是一组协议,包括多个具有不同功能且互为关联的协
议。
IP(Internet Protocol)协议是网络层的主要协议,支持网间互连的数据
通信。
TCP/IP协议模型从更实用的角度出发,形成了高效的四层体系结构,
即物理链路层、IP层、传输层和应用层。
TCP和UDPTCP协议
a. 使用TCP协议前,须先建立TCP连接,形成传输数据通道
b. 传输前,采用“三次握手”方式,点对点通信,是可靠的
c. TCP协议进行通信的两个应用进程:客户端、服务端
d. 在连接中可进行大数据量的传输
e. 传输完毕,需释放已建立的连接,效率低
UDP协议
a. 将数据、源、目的封装成数据包,不需要建立连接
b. 每个数据报的大小限制在64K内 c. 发送不管对方是否准备好,接收方收到也不确认,故是不
可靠的 可以广播发送
d. 发送数据结束时无需释放资源,开销小,速度快
Socket
利用套接字(Socket)开发网络应用程序早已被广泛的采用,以至于成
为事实上的标准。
网络上具有唯一标识的IP地址和端口号组合在一起才能构成唯一能识
别的标识符套接字。
通信的两端都要有Socket,是两台机器间通信的端点。
网络通信其实就是Socket间的通信。
Socket允许程序把网络连接当成一个流,数据在两个Socket间通过IO
传输。
一般主动发起通信的应用程序属客户端,等待通信请求的为服务端。
Socket分类:
a. 流套接字(stream socket):使用TCP提供可依赖的字节
流服务
b. 数据报套接字(datagram socket):使用UDP提供“尽力而
为”的数据报服务
Socket类的常用构造方法
a. public Socket(InetAddress address,int port)创建一个流套
接字并将其连接到指定 IP 地址的指定端口号
b. public Socket(String host,int port)创建一个流套接字并将
其连接到指定主机上的指定端口号
Socket类的常用方法
a. public InputStream getInputStream()返回此套接字的输入
流。可以用于接收网络消息
b. public OutputStream getOutputStream()返回此套接字的
输出流。可以用于发送网络消息
c. public InetAddress getInetAddress()此套接字连接到的远
程 IP 地址;如果套接字是未连接的,则返回 null。 d. public InetAddress getLocalAddress()获取套接字绑定的本
地地址。 即本端的IP地址
e. public int getPort()此套接字连接到的远程端口号;如果尚
未连接套接字,则返回 0。 f. public int getLocalPort()返回此套接字绑定到的本地端口。
如果尚未绑定套接字,则返回 -1。即本端的端口号。
g. public void close()关闭此套接字。套接字被关闭后,便不
可在以后的网络连接中使用(即无法重新连接或重新绑
定)。需要创建新的套接字对象。 关闭此套接字也将会关
闭该套接字的 InputStream 和OutputStream。 h. public void shutdownInput()如果在套接字上调用 shutdownInput() 后从套接字输入流读取内容,则流将返回
EOF(文件结束符)。 即不能在从此套接字的输入流中接
收任何数据。
i. public void shutdownOutput()禁用此套接字的输出流。对
于 TCP 套接字,任何以前写入的数据都将被发送,并且后
跟 TCP 的正常连接终止序列。 如果在套接字上调用
shutdownOutput() 后写入套接字输出流,则该流将抛出
IOException。 即不能通过此套接字的输出流发送任何数
据。
|