69期-Java SE-026-网络编程

### Java网络编程

Web 编程在整个 Java 开发中占据了很大一部分内容,所谓 Web 编程就是编写程序运行在同一网络下的两个终端上,使得它们之间可以进行数据传输。

计算机网络就是通过硬件设施、传输媒介把分散在不同地区的计算机进行连接,形成一个资源共享和数据传输的网络系统。

两台终端通过网络进行连接时,需要遵守一定的规则,这个规则就是网络协议(network rotocol),网络协议主要由3个特征组成:

- 语法:数据信息的结构。
- 语义:描述请求、动作和响应。
- 同步:动作的实现顺序。

网络通信协议有 TCP/IP 协议,IPX/SPX 协议,NetBEUI协议,最常用的协议是 TCP/IP 协议,同时该协议是分层的,分层的优点:

- 各层之间相互独立,互不干扰。
- 维护性、扩展性好。
- 有利于系统的标准化。

TCP/IP 协议可以分为4层,从上到下依次为应用层、传输层、网络层和网络接口层。

应用层(application layer)是整个体系结构中的顶层,通过应用程序之间的数据交互完成网络应用。

传输层(transport layer)为两台终端中的应用程序之间的数据交互提供数据传输服务。

网络层(network layer)也叫 IP 层,负责为网络中不同终端提供通信服务。

网络接口层(network interface layer)包括数据链路层(data link layer)和物理层(physical layer),数据链路层的作用是为两台终端的数据传输提供链路协议;物理层是指光纤、电缆等能够传递信号的各种物理介质。

终端A正在和终端B通过网络进行通信,整个数据的传输流程是终端A-》应用层-〉传输层-》网络层-〉数据链路层-》网络层-〉传输层-》应用层-〉终端B。

###IP和端口

IP:互联网中的每台终端设备都有一个唯一的标示,网络中的请求可以根据这个标示找到具体的计算机,这个唯一标示就是IP地址(Internel Protocol)。

192.168.11.102

IP地址=网络地址+主机地址,网络地址的作用是找到主机所在的网络,主机地址的作用是找到网络中的主机。IP地址可以分为5类,各类地址可以使用的IP数量不同,具体范围如下。

A类                1.0.0.1~126.255.255.254

B类                128.0.0.1~191.255.255.254

C类                192.0.0.1~223.255.255.254

D类                224.0.0.1~239.255.255.254

E类                240.0.0.1~255.255.255.254

实际开发中不需要记录本机的IP地址,可以使用127.0.0.1或者localhost来标示本机IP地址,Java 中有专门的类来描述IP地址,这个类是 java.net.InetAddress,常用方法如下。

public static InetAddress getLocalHost()                                            获取本地主机的InetAddress对象

public static InetAddress getByName(String host)                                            通过主机名创建InetAddress对象

String getHostName()                                                                            获取主机名称

public String getHostAddress()                                                            获取主机IP地址

public static InetAddress getByAddress(String host,byte[] addr)    通过主机名称和IP地址创建InetAddress对象

public static InetAddress getByAddress(byte[] addr)                        通过IP地址创建Address对象

?                                    

```java
import java.net.InetAddress;
import java.net.UnknownHostException;

public class Test {
    public static void main(String[] args) {
        InetAddress inetAddress;
        try {
            inetAddress = InetAddress.getLocalHost();
            System.out.println(inetAddress.getHostName());
            System.out.println(inetAddress.getHostAddress());
            inetAddress = InetAddress.getByName("127.0.0.1");
            System.out.println(inetAddress);
            inetAddress = InetAddress.getByName("localhost");
            System.out.println(inetAddress);
        } catch (UnknownHostException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }
}
```

### 端口

如果把IP比作一栋大厦的地址,那么端口(port)就是不同房间的门牌号,IP地址需要和端口结合使用,请求根据"IP地址+端口"就可以准确地找到互联网中接收请求的服务端。URL:localhost:3306。

### URL和URLConnection

- URL

通常所讲的网络资源实际就是指网络中真实存在的某个实体,比如一段文字、一张图片、一段视频、一首音频等,如果需要在网络中获取资源,可以用URI(Uniform Resource Identifier)统一资源定位符指向目标实体,URI的作用是用特定的语法来表示某个网络资源,Java 中专门封装了一个类用来描述URI,java.net.URI。

使用URI的实例化对象,可以用面向对象的方式来管理网络资源,如获取主机地址、端口等,在本机部署服务,通过URI读取该服务中的某个资源。

```java
import java.net.URI;
import java.net.URISyntaxException;

public class Test3 {
    public static void main(String[] args) {
        try {
            URI uri = new URI("http://localhost:8080/mytest.jsp");
            System.out.println(uri.getHost());
            System.out.println(uri.getPort());
            System.out.println(uri.getPath());
        } catch (URISyntaxException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}
```

- URL

URL 和 URI 有什么区别?URL(Uniform Resource Locator)是统一资源位置,在 URI 的基础上进行了扩充,在定位资源的同时还提供了对应的网络地址,Java 也对 URL 进行了封装,java.net.URL。

public URL(String protocol,String host,int port,String file)                                  根据协议、IP地址、端口号、资源名称获取URL对象

public final InputStream()                                                                                             获取输入流对象

```java
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.Reader;
import java.net.MalformedURLException;
import java.net.URL;

public class Test3 {
    public static void main(String[] args) {
        InputStream inputStream = null;
        Reader reader = null;
        BufferedReader bufferedReader = null;
        try {
            URL url = new URL("http","127.0.0.1",8080,"/login.jsp");
            inputStream = url.openStream();
            reader = new InputStreamReader(inputStream);
            bufferedReader = new BufferedReader(reader);
            String str = null;
            while((str = bufferedReader.readLine())!=null) {
                System.out.println(str);
            }
        } catch (MalformedURLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } finally {
            try {
                bufferedReader.close();
                reader.close();
                inputStream.close();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }
}
```

同时也可以通过URL获取资源的其他信息,如主机地址、端口等。

```java
import java.net.MalformedURLException;
import java.net.URL;

public class Test4 {
    public static void main(String[] args) {
        try {
            URL url = new URL("http","127.0.0.1",8080,"/login.jsp");
            System.out.println(url.getHost());
            System.out.println(url.getPort());
            System.out.println(url.getPath());
        } catch (MalformedURLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}
```

### URLConnection

URLConnection 用来描述URL指定资源的连接,是一个抽象类,常用的子类有 HttpURLConnection,URLConnection 底层是通过 HTTP 协议来处理的,它定义了访问远程网络资源的方法,通过URLConnection可以获取到 URL 资源的相关信息。

public int getContentLength()                                                    返回资源的长度,int 类型

public long getContentLengthLong()                                        返回资源的长度,long 类型

public String getContentType()                                                    返回资源的类型

public abstract void connect()                                                        判断连接的状态

public InputStream getInputStream()                                            获取输入流对象

```java
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.Reader;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;

public class Test5 {
    public static void main(String[] args) {
        try {
            URL url = new URL("http://localhost:8080/login.jsp");
            URLConnection urlConnection = url.openConnection();
            System.out.println(urlConnection);
            System.out.println(urlConnection.getURL());
            System.out.println(urlConnection.getContentLength());
            System.out.println(urlConnection.getContentLengthLong());
            System.out.println(urlConnection.getContentType());
            InputStream inputStream = urlConnection.getInputStream();
            Reader reader = new InputStreamReader(inputStream);
            BufferedReader bufferedReader = new BufferedReader(reader);
            String str = null;
            while((str = bufferedReader.readLine())!=null) {
                System.out.println(str);
            }
        } catch (MalformedURLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}
```

### TCP协议

Socket 类,通过 Socket 可以在服务端和客户端之间建立起可靠的连接。Socket 表示客户端,服务端使用 ServerSocket来表示,ServerSocket也是一个类,ServerSocket和Socket都存放在java.net包中。具体的思路是在服务端创建ServerSocket对象,然后通过该对象的accept()方法接收到若干个表示客户端的Socket对象。

Test.java

import java.net.InetAddress;
import java.net.UnknownHostException;

public class Test {
    public static void main(String[] args) {
        InetAddress inetAddress;
        try {
            inetAddress = InetAddress.getLocalHost();
            System.out.println(inetAddress.getHostName());
            System.out.println(inetAddress.getHostAddress());
            inetAddress = InetAddress.getByName("127.0.0.1");
            System.out.println(inetAddress);
            inetAddress = InetAddress.getByName("localhost");
            System.out.println(inetAddress);
        } catch (UnknownHostException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }
}

Test2.java

import java.net.URI;
import java.net.URISyntaxException;

public class Test2 {
    public static void main(String[] args) {
        try {
            URI uri = new URI("http://localhost:8080/login.jsp");
            System.out.println(uri.getHost());
            System.out.println(uri.getPort());
            System.out.println(uri.getPath());
        } catch (URISyntaxException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

Test3.java

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.Reader;
import java.net.MalformedURLException;
import java.net.URL;

public class Test3 {
    public static void main(String[] args) {
        InputStream inputStream = null;
        Reader reader = null;
        BufferedReader bufferedReader = null;
        try {
            URL url = new URL("http","127.0.0.1",8080,"/login.jsp");
            inputStream = url.openStream();
            reader = new InputStreamReader(inputStream);
            bufferedReader = new BufferedReader(reader);
            String str = null;
            while((str = bufferedReader.readLine())!=null) {
                System.out.println(str);
            }
        } catch (MalformedURLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } finally {
            try {
                bufferedReader.close();
                reader.close();
                inputStream.close();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }
}

Test4.java

import java.net.MalformedURLException;
import java.net.URL;

public class Test4 {
    public static void main(String[] args) {
        try {
            URL url = new URL("http","127.0.0.1",8080,"/login.jsp");
            System.out.println(url.getHost());
            System.out.println(url.getPort());
            System.out.println(url.getPath());
        } catch (MalformedURLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

Test5.java

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.Reader;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;

public class Test5 {
    public static void main(String[] args) {
        try {
            URL url = new URL("http://localhost:8080/login.jsp");
            URLConnection urlConnection = url.openConnection();
            System.out.println(urlConnection);
            System.out.println(urlConnection.getURL());
            System.out.println(urlConnection.getContentLength());
            System.out.println(urlConnection.getContentLengthLong());
            System.out.println(urlConnection.getContentType());
            InputStream inputStream = urlConnection.getInputStream();
            Reader reader = new InputStreamReader(inputStream);
            BufferedReader bufferedReader = new BufferedReader(reader);
            String str = null;
            while((str = bufferedReader.readLine())!=null) {
                System.out.println(str);
            }
        } catch (MalformedURLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

原文地址:https://www.cnblogs.com/HiJackykun/p/11173386.html

时间: 2024-08-30 11:16:18

69期-Java SE-026-网络编程的相关文章

Java学习之网络编程实例

转自:http://www.cnblogs.com/springcsc/archive/2009/12/03/1616413.html 多谢分享 网络编程 网络编程对于很多的初学者来说,都是很向往的一种编程技能,但是很多的初学者却因为很长一段时间无法进入网络编程的大门而放弃了对于该部分技术的学习. 在学习网络编程以前,很多初学者可能觉得网络编程是比较复杂的系统工程,需要了解很多和网络相关的基础知识,其实这些都不是很必需的.首先来问一个问题:你 会打手机吗?很多人可能说肯定会啊,不就是按按电话号码

黑马程序员————java中的网络编程

------<a href="http://www.itheima.com" target="blank">Java培训.Android培训.iOS培训..Net培训</a>.期待与您交流! ------- java中的网络编程 一.网络编程概述:基于互联网的编程 就是用来实现网络互连的不同计算机上运行的程序间可以进行数据交换. 二.网络模型:OSI和TCP/IP 1.OSI(Open System Interconnection开放系统互连

第62节:探索Java中的网络编程技术

前言 感谢! 承蒙关照~ 探索Java中的网络编程技术 网络编程就是io技术和网络技术的结合,网络模型的定义,只要共用网络模型就可以两者连接.网络模型参考. 一座塔有七层,我们需要闯关. 第一层物理层->第二层数据链路层->第三层网络层->第四层传输层->第五层会话层->第六层表示层->第七层应用层. 物理层是主要定义物理设备标准,数据链路层是主要讲从物理层接收的数据进行MAC地址(网卡的地址)的封装与解封装.这层的数据较帧. 网络层是将从下层接收到的数据进行IP地址的

Java中的网络编程-2

Socket编程:(一般的网络编程) <1> 两个 JAVA 应用程序可通过一个双向的网络通信连接, 实现数据交换, 这个双向链路的一段称为一个 Socket. <2> Socket 通常用来实现 Client-Server 连接. <3> java.net 包中定义的两个类 Socket 和 ServerSocket(阻塞式), 分别用来实现双向连接的 Client 和 Server 端. <4> 建立连接时, 所需的寻址信息为远程计算机的 IP 地址和端

java中的网络编程基本回顾

网络编程基本概念,TCP/IP协议简介 网络基础知识 网络编程的目的就是指直接或间接地通过网络协议与其他计算机进行通讯.网络编程中有两个主要的问题,一个是如何准确的定位网络上一台或多台主机,另一个就是找到主机后如何可靠高效的进行数据传输.在TCP/IP协议中IP层主要负责网络主机的定位,数据传输的路由,由IP地址可以唯一地确定Internet上的一台主机.而TCP层则提供面向应用的可靠的或非可靠的数据传输机制,这是网络编程的主要对象,一般不需要关心IP层是如何处理数据的. 目前较为流行的网络编程

黑马程序员-Java基础之网络编程

网络编程 实现计算机互联的三要素: 1.IP地址 本机回路IP:127.0.0.1 2.端口号(逻辑端口):用于标识应用程序. 端口号0~65535之间的整数:0~1024之间大部分已被用于一些知名的网络服务和应用,所以现在开发的网络应用程序端口号一般是1024以后的整数. 3.通信协议 TCP:三次握手机制,面向连接,稍慢.可靠 UDP:无连接,每个数据报大小限制在64K内.传输快.不可靠. 网络参考模型 TCP/IP参考模型 应用层:javaWeb开发 传输层:TCP/UDP 网际层:IP

java理论之java多线程与网络编程

多线程 一 :多线程的基本概念: 1:线程是一个程序的不同的执行路径 2:进程---内存区代码去的可执行代码,main方法,主线程,真正执行的方式和代码 二:创建/启动新的线程: 1:创建---创建新线程只有一种方法:实现Runnable中的run()是创建新线程,唯一方法 (1)创建一个类,继承java.lang.Thread类:class ExThr extends Thread{} (2)创建一个普通类,实现Runable()接口:class ImpRun implements Runna

java基础篇---网络编程(TCP程序设计)

TCP程序设计 在Java中使用Socket(即套接字)完成TCP程序的开发,使用此类可以方便的建立可靠地,双向的,持续的,点对点的通讯连接. 在Socket的程序开发中,服务器端使用serverSocket等待客户端的连接,对于Java的网络程序来讲,每一个客户端都使用一个socket对象表示. 在Java的网络程序中,客户端只要符合连接的通讯协议,那么服务端都可以进行接收. ServerSocket类主要用于服务器端程序的开发上,用于接收客户端的连接请求. Socket在服务器端每次运行时都

java基础篇---网络编程

一:IP与InetAddress 在Java中支持网络通讯程序的开发,主要提供了两种通讯协议:TCP协议,UDP协议 可靠地连接传输,使用三方握手的方式完成通讯 不可靠的连接传输,传输的时候接受方不一定可以接受的到 在Java中的所有网络程序的开发类都在java.net包中存在 IP地址简介 IP地址是指互联网协议地址(英语:Internet Protocol Address,又译为网际协议地址),是IP Address的缩写.IP地址是IP协议提供的一种统一的地址格式,它为互联网上的每一个网络