文章目录
本章重点
网络编程的基础知识 (掌握)
- 网络基础
- IP地址和端口号
Java的基本网络支持 (掌握)
- 使用InetAddress
- 使用URL
Java网络通信
- 传统的网络编程是一项非常细节化的工作,程序员必须处理和网络有关的大量细节,如各种协议,甚至要理解网络相关的硬件知识。而Java则将底层的网络通信细节予以屏蔽,使得使用的编程模型是一个文件模型,也就是说,可以象操作流一样来操作网络数据传输。另外,由于在网络连接中,通常都需要一个服务器同时为多个客户端服务,因此Java的多线程机制也大派用场。
- 事实上网络编程简单的理解就是两台计算机相互通讯数据而已.对于程序员而言,去掌握一种编程
接口并使用一种编程模型相对就会显得简单的多了.JavaJDK提供一些相对简单的Api来完成这些工 作.Socket就是其中之一.对于Java而言.这些Api存在与java.net 这个包里面.因此只要导入这个包就可以准备网络编程了. - 网络编程的基本模型就是客户机到服务器模型.简单的说就是两个进程之间相互通讯,然后其中一个必须提供一个固定的位置,而另一个则只需要知道这个固定的位置.并去建立两者之间的联系.然后完成数据的通讯就可以了.这里提供固定位置的通常称为服务器,而建立联系的通常叫做客户端.基于这个简单的模型,就可 以进入网络编程啦
计算机网络基础知识
计算机网络:
把分布在不同地理区域的计算机与专门的外部设备用通信线路互连成一个规模宏大、功能强大的网络系统,从而使众多的计算机可以方便地互相传递信息,共享硬件、软件、数据信息等资源。
通俗的说,计算机网络就是通过电缆、电话线、 或无线通讯设施等互联的计算机的集合。
网络编程的目的:
直接或间接地通过网络协议与其它计算机进行通信
计算机的联网可以实现:
使用远程资源
共享信息、程序和数据
分布处理
网络编程中有两个主要的问题:
》如何准确地定位网络上一台或多台主机
》找到主机后如何可靠高效地进行数据传输
网络通讯的要素:
IP 地 址
端 口 号
传输协议
IP地址
计算机和计算间之间进行通信的时候,如何相互之间能够相互找到呢?
从A机器发送到B机器的数据看成是信的内容,那么,机器在发送数据包的时候也必须知道对方的地址,在网络中,它是通过IP地址来标识的。
IP的组成
IP地址是数字型的,由32位(bit)二进制表示,将它分割成由4段(segment),每段由8位的二进制数组成,每段
(8位)之间用圆点(.)隔开。用点分开的各段可以表示的数值范围是0~255
IP地址的定义
为了实现Internet上不同计算机之间的通信,每台计算机都必须有一个不与其它计算机重复的地址—IP地址
因特网上的IP地址具有全球唯一性;
IP地址是数字型的,32位(32bit),由4个 8位的二进制数组成,常用点分十进制的格式表示,例如:192.168.0.16
网络标识(network id)和主机标识 (host id)
IP地址的分类
A类:1.0.0.0 到126.0.0.0【0.0.0.0 和127.0.0.0保留 】
B类:128.1.0.0到191.254.0.0【128.0.0.0和191.255.0.0保留 】
C类:192.0.1.0 到223.255.254.0【192.0.0.0和223.255.255.0保留】
D类:224.0.0.0到239.255.255.255用于多点广播
E类:240.0.0.0到255.255.255.254
=======================================
IP地址为192.168.0.210则它的主机标识:0.0.0.210 网络标识192.168.0.0
端 口
常用默认端口
位置 | 端口 |
---|---|
FTP的端口是 | 21 |
TELNET 端口 是 | 23 |
MAIL 的端口号是 | 25\110 |
pop3\smtp 的端口号是 | 110/25 |
DNS 的端口号是 | 53 |
HTTP通信用的端口号是 | 80 |
mysql默认端口是 | 3306 |
SQL Server服务使用两个端口 | TCP-1433、UDP-1434 |
ORACLE默认端口 | 1521、1526 |
tomcat默认端口是 | 8080 |
网络通信协议
网络通信协议
计算机网络中实现通信必须有一些约定即通信协议,对速率、传输代码、代码结构、传输控制步骤、出错控制等制定标准。
网络通信结构
为了使两个结点之间能进行对话,必须在它们之间建立通信工具(即接口),使彼此之间 能进行信息交换。接口包括两部分:
硬件装置:实现结点之间的信息传送
软件装置:规定双方进行通信的约定协议
TCP协议
TCP(Transmission Control Protocol,传输控制协议)是基于连接的协议,也就是说,在正式收发数据前,必须和对方建立可靠的连接。一个TCP连接必须要经过三次“对话”才能建立起来.我们来看看这三次对话的简单过程:主机A向主机B发出连接请求数据包:“我想给你发数据,可以吗?”,这是第一次对话;主机B向主机A发送同意连接和要求同步(同步就是两台主机一个在发送,一个在接收,协调工作)的数据包:“可以,你什么时候发?”,这是第二次对话;主机A再发出一个数据包确认主机B的要求同步:“我现在就发,你接着吧!”,这是第三次对话。三次“对话”的目的是使数据包的发送和接收同步,经过三次“对话”之后,主机A才向主机B正式发送数据。
IP协议
IP协议(Internet Protocol/因特网互联协议)是网络上的计算机进行连接的基础
IP协议是不可靠的:无论传送正确与否都不进行检验、不回送确认、不保证分组的正确顺序
IP协议位于网络层
TCP/IP协议
TCP/IP:是Internet上不同系统之间互联的一组协议。TCP/IP 定义了电子设备如何连入因特网,以及数据如何在它们之间传输的标准
TCP/IP通常被看成一个4层模型:应用层、传输层、网络层以及数据链路层+物理层。
通俗而言:TCP负责发现传输的问题,一有问题就发出信号,要求重新传输,直到所有数据安全正确地传输到目的地。而IP是给因特网的每一台联网设备规定一个地址。
InetAddress
此类表示互联网协议 (IP) 地址。
InetAddress的实例对象包含以数字形式保存的IP地址,同时还可能包含主机名(如果使用主机名来获取InetAddress的实例,或者使用数字来构造,并且启用了反向主机名解析的功能)。InetAddress类提供了将主机名解析为IP地址(或反之)的方法。
》static InetAddress getByName(String host)
在给定主机名的情况下确定主机的 IP 地址
》static InetAddress[] getAllByName(String host)
在给定主机名的情况下,根据系统上配置的名称服务返回其 IP 地址所组成的数组。
》static InetAddress getLocalHost()
返回的是本地地址
例子
* 本地主机
InetAddress i = InetAddress.getLocalHost();// 返回本地主机。
System.out.println(i.toString());
System.out.println(i.getHostAddress());// 返回 IP 地址字符串
System.out.println(i.getHostName());// 获取此 IP 地址的主机名
* 百度主机
InetAddress add1 = InetAddress.getByName("www.baidu.com");// 获取百度主机// 1.1.1.1
System.out.println(add1.getHostAddress() + "\t\t" + add1.getHostName());
* 局域网中某一台主机
InetAddress add2 = InetAddress.getByName("192.168.7.133");// 1.1.1.1
System.out.println(add2.getHostAddress() + "\t\t" + add2.getHostName());
//如果IP地址和对应的主机名没有在网络上 ,所以没有将对应的IP地址进行解析
URL 2-1
统一资源定位器
指向 Internet 上的资源文件
URL 类提供 API 来访问 Internet 上的信息
URL 的组件:
协议
IP 地址或主机名
端口号
实际文件路径
实例
URL u = new URL(“http://192.168.1.1:8080/myweb/demo.html?name=abc”);
System.out.println(u.getHost());
System.out.println(u.getFile());
System.out.println(u.getPath());
System.out.println(u.getPort());
System.out.println(u.getProtocol());
System.out.println(u.getQuery());
URLConnection
openConnection()
connect()
使用
URL url = new URL(address);
URLConnection conn = url.openConnection();
conn.getInputStream();
conn.getOutputStream();
URLDecode和URLEncode
解码器和编码器
static String encode(String s)
已过时。 结果字符串可能因平台默认编码不同而不同。因此,改用 encode(String,String) 方法指定编码。 static String encode(String s, String enc)
使用指定的编码机制将字符串转换为 application/x-www-form-urlencoded 格式。
static String decode(String s)
已过时。 结果字符串可能因平台默认编码不同而不同。因此,改用 decode(String,String) 方法指定编码。 static String decode(String s, String enc)
使用指定的编码机制对 application/x-www-form-urlencoded 字符串解码。
String mytext = java.net.URLEncoder.encode(“中国”, “utf-8”); String mytext2 = java.net.URLDecoder.decode(mytext, “utf-8”);
这两条语句在同一个页面中的话,得到的结果是:
mytext: %E4%B8%AD%E5%9B%BD mytex2: 中国
总结
网络编程的基础知识 (掌握)
网络基础
IP地址和端口号
Java的基本网络支持 (掌握)
使用InetAddress