网络编程

1.什么是网络?网络模型?网络四要素?
网络:
在计算机领域中网络是信息传输,接收,共享的虚拟平台,通过它把各个点,面,体的联系到一起,从而实现这些资源的共享。
网络模型:
计算机网络是指由通信线路互相连接的许多自主工作的计算机构成的集合体,各个部件之间以何种规则进行通信,就是网络模型研究的问题。
网络模型一般是指OSI七层参考模型和TCP/IP四层参考模型。这两个模型在网络中应用最为广泛。
OSI七层参考模型:
应用层\表示层\会话层\传输层\网络层\数据链路层\物理层

TCP/IP四层参考模型:
应用层、传输层、IP层【网际层】、网路接口层【网络连入层】


3.网络四要素
3.1 IP地址:
处于网络中的通信设备(电脑、手机、电视等),都会分配一个ip地址。
这些设备在通信之前,首先要通过通信设备的网卡接入到网络中。而这个网卡属于一个硬件,并且所有的网卡在出厂的时候,都有一个固定的网卡地址。并且这个网卡地址(MAC地址)全球唯一。
所有的网卡都有一个唯一的物理地址,但是这个地址非常的不好记。于是给每个网卡有分了一个逻辑(IP)地址。这个逻辑地址就是ip地址。通信的过程中,就可以根据这个逻辑地址找到处于网络中的这台设备。
IP地址也是对处于网络中的某个通信终端的标识。然后通信的另外一方,就可以根据这个ip地址找到对方,和对方进行通信。
由于IP地址也不容易记忆,因此又给每个ip绑定了一个名称。这个名称被称为(域名)。
https://www.baidu.com/[域名]—DNS服务器【域名解析服务器】----IP地址----网卡物理地址
通信设备只要连接到网络中,网络就会给这个设备分配一个IP地址。要进行网络通信,必须使用的IP地址。
网卡----唯一的地址【MAC地址】—不容易记忆----逻辑地址【IP地址】—不容易记忆—为每一个IP地址绑定一个名称—域名。
3.2域名解析
访问网络的时候,真正是需要通过IP地址访问。但是由于IP地址也不容易记忆。因此又给网络中的每个IP地址起名字,这个名称就叫做域名。
当我们在浏览器等可以访问网络的软件中输入了某个域名之后,需要将这个域名解析(解释)成对应的IP地址。这个过程就叫域名解析。
域名解析分成2步:
(1)本地解析:
在我们的操作系统中,有一个hosts文件,当输入域名之后,首先会在hosts文件中找有没有当前的域名对应的IP地址,有就会使用这个IP地址。
C:\Windows\System32\drivers\etc\hosts
(2)DNS服务器解析:
如果第一步解析失败了,会到网络中的DNS服务器上进行解析。DNS服务器中会将全球所有的域名和IP设置在其中。如果DNS服务器解析失败,说明当前的域名有问题的。

3.3协议
协议:通信双方通信的时候需要遵守的通信的规则。

目前我们网络编程介绍的协议属于底层协议,所有的高级协议都是基于底层协议。
有ip可以找到网络中的那个设备,设备之间要通信,还要使用相同的通信协议。
我们目前所接触的是一些底层的协议,相对来说比较简单。
3.4端口
我们通过ip可以找到网络中具体那个通信终端的设备。而具体需要访问这个设备中的哪个资源(软件)信息,这时由于设备中运行的资源(软件)肯定很多,这时每个资源(软件)必须再给一个唯一的编号(标识)。通过这个标识才能保证我们可以没有错误的访问到指定ip地址的具体那个资源(软件)上。
端口:是一台设备(电脑、手机登)上某个应用程序的唯一标识。设备中运行的任何一个软件,只要启动,就肯定会有一个唯一的编号其整个软件绑定。

端口从0开始到65535之间。0到1024之间的端口数字已经分配给本机的操作系统的应用程序占用,因此后期我们书写程序如果需要绑定端口,这时必须大于1024.
2.InetAddress类?
IP对象:
在网络中需要连接到另外一个的设备,然后才能进行通信。而处于网络中的任何一个设备都需要唯一的数字地址标识(IP)。
IP是网络中设备中存在的一类特殊的数据,那么Java针对IP整个特殊的数据,也给出了一个类,这个类保存在java.net包下
java.net
类 InetAddress 此类表示互联网协议 (IP) 地址。
这个封装IP地址的InetAddress类,在创建对象的时候,是需要静态方法来创建对象。

InetAddress类定义:
public class InetAddress implements java.io.Serializable
InetAddress类的构方法
InetAddress() {}

通过这个构造方法我们认识到InetAddress类的构造方法是一个缺省修饰符修饰的
说明跨出InetAddress类所在的Java.net包就不能使用啦。
所以我们在自己的Java程序中是不能通过new+构造方法的方式创建出InetAddress类对象。
我们就需要使用下面这两个静态方法来得到InetAddress类对象

实例方法:

例如:
package com.click369.test1;
import java.net.InetAddress;
import java.net.UnknownHostException;public class InetAddressTest1 {public static void main(String[] args) throws Exception {/*//得到本机的IP地址和主机名//1.得到包含有本机IP地址的InetAddress对象//static InetAddress getLocalHost() 返回包含有本机IP地址的InetAddress对象。InetAddress benji=InetAddress.getLocalHost();//得到本机IP地址// String  getHostAddress() 返回 IP 地址字符串(以文本表现形式)。String ip=benji.getHostAddress();//得到本机主机名//String getHostName() 获取此 IP 地址的主机名。String name=benji.getHostName();System.out.println(name+"\t"+ip);*///得到百度服务器的IP地址//1.得到包含有百度IP地址的InetAddress对象//static InetAddress getByName(String host) 根据域名得到包含有该域名对应ip地址的InetAddress对象。InetAddress baiduip=InetAddress.getByName("www.baidu.com");//得到百度IP地址// String   getHostAddress() 返回 IP 地址字符串(以文本表现形式)。String ip=baiduip.getHostAddress();System.out.println("www.baidu.com==="+ip);//http://www.baidu.com///http://14.215.177.38/}
}

3.TCP协议?优缺点?基于TCP的通讯程序需要使用的类和常用方法?
客户端
java.net 类 Socket—类实现客户端套接字(也可以就叫“套接字”)。套接字是两台机器间通信的端点。

服务器端:
java.net 类 ServerSocket—此类实现服务器套接字

构造方法摘要
ServerSocket(int port) 创建绑定到特定端口的服务器套接字。

客户端的创建步骤:
1.得到客户端需要链接的服务器端的IP地址,得到端口号。
2.使用Socket(InetAddress address, int port) /Socket(String host, int port)创建客户端对象
3.通过创建客户端对象Socket对象调用getInputStream()/getOutputStream()创建收发数据的输入流/输出流对象。
4.使用创建收发数据的输入流/输出流对象,调用read/write方法完成数据的收发。
5.关闭流和客户端对象。

服务器端的创建步骤:
1、指定端口号,与客户端需要链接的服务器端的端口号相同。
2、使用ServerSocket(int port)创建服务器端对象。
3、使用创建服务器端对象调用accept()接收链接到服务器的客户端对象。
4、使用链接到服务器的客户端对象调用getInputStream()/getOutputStream()创建收发数据的输入流/输出流对象。
5、使用创建收发数据的输入流/输出流对象,调用read/write方法完成数据的收发。
6、关闭流和客户端对象与服务器端对象。

例如1:客户端向服务器端发送“hello,你好”,服务器端接收到客户端发来的“hello,你好”
package com.click369.test1;import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.InetAddress;
import java.net.Socket;/*** 客户端的创建步骤:
1.得到客户端需要链接的服务器端的IP地址,得到端口号。
2.使用Socket(InetAddress address, int port)   /Socket(String host, int port)创建客户端对象
3.通过创建客户端对象Socket对象调用getInputStream()/getOutputStream()创建收发数据的输入流/输出流对象。
4.使用创建收发数据的输入流/输出流对象,调用read/write方法完成数据的收发。
5.关闭流和客户端对象。* @author Administrator**/
public class TcpClient1 {public static void main(String[] args)throws Exception {//1.得到客户端需要链接的服务器端的IP地址,得到端口号。InetAddress serverip=InetAddress.getLocalHost();int serverport=3000;//2.使用Socket(InetAddress address, int port)创建客户端对象Socket  client=new Socket(serverip,serverport);//3.通过创建客户端对象Socket对象调用getOutputStream()创建收发数据的输入流/输出流对象。OutputStream  out=client.getOutputStream();System.out.println("请输入需要发送的数据:");BufferedReader  read=new BufferedReader(new InputStreamReader(System.in));String info=read.readLine(); //4.使用创建收发数据的输出流对象,调用write方法完成数据的发。out.write(info.getBytes());//5.关闭流和客户端对象。out.close();client.close();}
}package com.click369.test1;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;
/*** 服务器端的创建步骤:
1、指定端口号,与客户端需要链接的服务器端的端口号相同。
2、使用ServerSocket(int port)创建服务器端对象。
3、使用创建服务器端对象调用accept()接收链接到服务器的客户端对象。
4、使用链接到服务器的客户端对象调用getInputStream()/getOutputStream()创建收发数据的输入流/输出流对象。
5、使用创建收发数据的输入流/输出流对象,调用read/write方法完成数据的收发。
6、关闭流和客户端对象与服务器端对象。* @author Administrator**/
public class TcpServer1 {public static void main(String[] args)throws Exception {//1、指定端口号,与客户端需要链接的服务器端的端口号相同。int serverport=3000;//2、使用ServerSocket(int port)创建服务器端对象。ServerSocket  server=new ServerSocket(serverport);System.out.println("服务器已经开启等待客户端链接!!!!");//3.使用创建服务器端对象调用accept()接收链接到服务器的客户端对象。Socket  client=server.accept();//4.使用链接到服务器的客户端对象调用getInputStream()创建收发数据的输入流/输出流对象。InputStream  in=client.getInputStream();//5.使用创建收发数据的输入流对象,调用read方法完成数据的收。byte data[]=new byte[100];int len=in.read(data);String info=new String(data,0,len);System.out.println("服务器端接收到来自客户端的消息是=="+info);//6.关闭流和客户端对象与服务器端对象。in.close();client.close();server.close();}
}
先启动服务器端程序,再运行客户端程序
例如2:客户端持续向服务器端发送数据,服务器端持续接收到客户端发来的数据
package com.click369.test2;import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.InetAddress;
import java.net.Socket;/*** @author Administrator**/
public class TcpClient1 {public static void main(String[] args)throws Exception {//1.得到客户端需要链接的服务器端的IP地址,得到端口号。InetAddress serverip=InetAddress.getLocalHost();int serverport=3000;//2.使用Socket(InetAddress address, int port)创建客户端对象Socket  client=new Socket(serverip,serverport);//3.通过创建客户端对象Socket对象调用getOutputStream()创建收发数据的输入流/输出流对象。OutputStream  out=client.getOutputStream();boolean flag=true;BufferedReader  read=new BufferedReader(new InputStreamReader(System.in));while(flag){System.out.println("请输入需要发送的数据:");String info=read.readLine();  if(info.equals("886")){flag=false;}//4.使用创建收发数据的输出流对象,调用write方法完成数据的发。out.write(info.getBytes());}//5.关闭流和客户端对象。out.close();client.close();}
}package com.click369.test2;import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;/**** @author Administrator**/
public class TcpServer1 {public static void main(String[] args)throws Exception {//1、指定端口号,与客户端需要链接的服务器端的端口号相同。int serverport=3000;//2、使用ServerSocket(int port)创建服务器端对象。ServerSocket  server=new ServerSocket(serverport);System.out.println("服务器已经开启等待客户端链接!!!!");//3.使用创建服务器端对象调用accept()接收链接到服务器的客户端对象。Socket  client=server.accept();//4.使用链接到服务器的客户端对象调用getInputStream()创建收发数据的输入流/输出流对象。InputStream  in=client.getInputStream();boolean flag=true;byte data[]=new byte[100];while(flag){//5.使用创建收发数据的输入流对象,调用read方法完成数据的收。int len=in.read(data);String info=new String(data,0,len);if(info.equals("886")){flag=false;}System.out.println("服务器端接收到来自客户端的消息是=="+info);}//6.关闭流和客户端对象与服务器端对象。in.close();client.close();server.close();上面的实例只能完成客户端只负责发送数据,服务器负责接收数据}
}
例如2:客户端持续向服务器端发送数据并且接收来自服务器返回的数据,服务器端持续接收到客户端发来的数据,并且向客户端发送响应数据。
package com.click369.test3;import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.InetAddress;
import java.net.Socket;/*** @author Administrator**/
public class TcpClient1 {public static void main(String[] args)throws Exception {InetAddress serverip=InetAddress.getLocalHost();int serverport=3000;Socket  client=new Socket(serverip,serverport);OutputStream  out=client.getOutputStream();InputStream   in=client.getInputStream();boolean flag=true;BufferedReader  read=new BufferedReader(new InputStreamReader(System.in));byte data[]=new byte[100];while(flag){System.out.println("请输入需要发送的数据:");String info=read.readLine(); if(info.equals("886")){flag=false;}//4.使用创建收发数据的输出流对象,调用write方法完成数据的发。out.write(info.getBytes());//客户端读取服务器返回的数据int len=in.read(data);String msg=new String(data,0,len);System.out.println("客户端端接收到来自服务器端的消息是=="+msg);}//5.关闭流和客户端对象。in.close();out.close();client.close();}
}package com.click369.test3;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
/**** @author Administrator**/
public class TcpServer1 {public static void main(String[] args)throws Exception {int serverport=3000;ServerSocket  server=new ServerSocket(serverport);System.out.println("服务器已经开启等待客户端链接!!!!");Socket  client=server.accept();InputStream  in=client.getInputStream();OutputStream  out=client.getOutputStream();boolean flag=true;byte data[]=new byte[100];while(flag){int len=in.read(data);String info=new String(data,0,len);if(info.equals("886")){flag=false;}System.out.println("服务器端接收到来自客户端的消息是=="+info);//服务器端向客户端发送响应数据info="server-"+info;out.write(info.getBytes());}out.close();in.close();client.close();server.close();}
}
上面实例只能完后一个服务器服务与一个客户端。```java
例如2:一台服务器端持续接收到多个客户端发来的数据,并且向多个客户端发送响应数据。客户端持续向服务器端发送数据并且接收来自服务器返回的数据。
【一台服务器服务于多个客户端】此时需要使用多线程技术
package com.click369.test4;import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.InetAddress;
import java.net.Socket;/*** @author Administrator**/
public class TcpClient1 {public static void main(String[] args)throws Exception {InetAddress serverip=InetAddress.getLocalHost();int serverport=3000;Socket  client=new Socket(serverip,serverport);OutputStream  out=client.getOutputStream();InputStream   in=client.getInputStream();boolean flag=true;BufferedReader  read=new BufferedReader(new InputStreamReader(System.in));byte data[]=new byte[100];while(flag){System.out.println("请输入需要发送的数据:");String info=read.readLine(); if(info.equals("886")){flag=false;}//4.使用创建收发数据的输出流对象,调用write方法完成数据的发。out.write(info.getBytes());//客户端读取服务器返回的数据int len=in.read(data);String msg=new String(data,0,len);System.out.println("客户端端接收到来自服务器端的消息是=="+msg);}//5.关闭流和客户端对象。in.close();out.close();client.close();}
}package com.click369.test4;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
/*** 服务器为每一个客户端提供的线程操作类* @author Administrator**/
public class ServerThread extends Thread{private Socket  client;public ServerThread(Socket  client){this.client=client;}@Overridepublic void run() {try{InputStream  in=client.getInputStream();OutputStream  out=client.getOutputStream();boolean flag=true;byte data[]=new byte[100];while(flag){int len=in.read(data);String info=new String(data,0,len);if(info.equals("886")){flag=false;}System.out.println("服务器端接收到来自客户端的消息是=="+info);//服务器端向客户端发送响应数据info="server-"+info;out.write(info.getBytes());}out.close();in.close();client.close();}catch(Exception e){e.printStackTrace();}}
}package com.click369.test4;
import java.net.ServerSocket;
import java.net.Socket;/*** @author Administrator*/
public class TcpServer1 {public static void main(String[] args)throws Exception {int serverport=3000;ServerSocket  server=new ServerSocket(serverport);System.out.println("服务器已经开启等待客户端链接!!!!");boolean flag=true;while(flag){Socket  client=server.accept();//为链接到服务器的每一个客户端单独开启一天线程ServerThread  serverThread=new ServerThread(client);serverThread.start();   }server.close();}
}

4.UDP协议?优缺点?基于UDP的通讯程序需要使用的类和常用方法?
基于UDP协议的通讯程序是部分客户端和服务器端的。
1.负责打包数据的java类
java.net 类 DatagramPacket–此类表示数据报包。
数据报包用来实现无连接包投递服务。每条报文仅根据该包中包含的信息从一台机器路由到另一台机器。从一台机器发送到另一台机器的多个包可能选择不同的路由,也可能按不同的顺序到达。不对包投递做出保证。

打包方法:

拆包方法:

2.负责收发数据包的java类
java.net 类 DatagramSocket–此类表示用来发送和接收数据报包的套接字

UDP协议发送数据的步骤:
1.通过DatagramPacket(byte[] buf, int length, InetAddress address, int port)将被发送的数据打包好。
2.通过DatagramSocket()创建一个发送数据包的对象。
3.使用发送数据包的对象调用send(DatagramPacket p)将打包好的数据发出。
4.关闭DatagramSocket。
UDP协议接收数据的步骤:
1.通过DatagramSocket(int port)创建一个接收数据包的对象。
2.通过DatagramPacket(byte[] buf, int length)构造一个空的数据包。
3.使用创建好的接收数据包的对象调用receive(DatagramPacket p)将接收到的数据包保存在空的数据包。
4.通过DatagramPacket提供的【拆包方法】getXXXX方法从接收数据包中取出需要的数据。
5.关闭DatagramSocket

例如:客户端【发送数据一方】发送数据,服务器【接收数据的一方】接收数据。
package com.click369.test1;import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;/**
UDP协议发送数据的步骤:
1.通过DatagramPacket(byte[] buf, int length, InetAddress address, int port)将被发送的数据打包好。
2.通过DatagramSocket()创建一个发送数据包的对象。
3.使用发送数据包的对象调用send(DatagramPacket p)将打包好的数据发出。
4.关闭DatagramSocket。* @author Administrator**/
public class UdpClient1 {public static void main(String[] args) throws Exception{System.out.println("请输入需要发送的数据:");BufferedReader  read=new BufferedReader(new InputStreamReader(System.in));String info=read.readLine();byte buf[]=info.getBytes();int length=buf.length;InetAddress address=InetAddress.getLocalHost();int port=3000;//1.通过DatagramPacket(byte[] buf, int length, InetAddress address, int port)将被发送的数据打包好。DatagramPacket  sendpacket=new DatagramPacket(buf,length,address,port);//2.通过DatagramSocket()创建一个发送数据包的对象。DatagramSocket client=new DatagramSocket();//3.使用发送数据包的对象调用send(DatagramPacket p)将打包好的数据发出。client.send(sendpacket);//4.关闭DatagramSocket。client.close();}
}package com.click369.test1;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
/*** UDP协议接收数据的步骤:
1.通过DatagramSocket(int port)创建一个接收数据包的对象。
2.通过DatagramPacket(byte[] buf, int length)构造一个空的数据包。
3.使用创建好的接收数据包的对象调用receive(DatagramPacket p)将接收到的数据包保存在空的数据包。
4.通过DatagramPacket提供的【拆包方法】getXXXX方法从接收数据包中取出需要的数据。
5.关闭DatagramSocket* @author Administrator**/
public class UdpServer1 {public static void main(String[] args)throws Exception{//1.通过DatagramSocket(int port)创建一个接收数据包的对象。DatagramSocket server=new DatagramSocket(3000);byte buf[]=new byte[100];int length=buf.length;//2.通过DatagramPacket(byte[] buf, int length)构造一个空的数据包。DatagramPacket receivepacket=new DatagramPacket(buf,length);//3.使用创建好的接收数据包的对象调用receive(DatagramPacket p)将接收到的数据包保存在空的数据包。server.receive(receivepacket);//4.通过DatagramPacket提供的【拆包方法】getXXXX方法从接收数据包中取出需要的数据。byte data[]=receivepacket.getData();int datalength=receivepacket.getLength();String clientip=receivepacket.getAddress().getHostAddress();int clientport=receivepacket.getPort();String info=new String(data,0,datalength);System.out.println("服务器端从客户端接收的数据是:"+info);//5.关闭DatagramSocketserver.close();}
}
例如:客户端【发送数据一方】持续发送数据,服务器【接收数据的一方】持续接收数据。
package com.click369.test1;import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;/**
UDP协议发送数据的步骤:
1.通过DatagramPacket(byte[] buf, int length, InetAddress address, int port)将被发送的数据打包好。
2.通过DatagramSocket()创建一个发送数据包的对象。
3.使用发送数据包的对象调用send(DatagramPacket p)将打包好的数据发出。
4.关闭DatagramSocket。* @author Administrator**/
public class UdpClient1 {public static void main(String[] args) throws Exception{boolean flag=true;BufferedReader  read=new BufferedReader(new InputStreamReader(System.in));InetAddress address=InetAddress.getLocalHost();int port=3000;DatagramSocket client=new DatagramSocket();while(flag){System.out.println("请输入需要发送的数据:");String info=read.readLine();byte buf[]=info.getBytes();int length=buf.length;DatagramPacket  sendpacket=new DatagramPacket(buf,length,address,port);client.send(sendpacket);}//4.关闭DatagramSocket。client.close();}}package com.click369.test1;
import java.net.DatagramPacket;
import java.net.DatagramSocket;/*** UDP协议接收数据的步骤:
1.通过DatagramSocket(int port)创建一个接收数据包的对象。
2.通过DatagramPacket(byte[] buf, int length)构造一个空的数据包。
3.使用创建好的接收数据包的对象调用receive(DatagramPacket p)将接收到的数据包保存在空的数据包。
4.通过DatagramPacket提供的【拆包方法】getXXXX方法从接收数据包中取出需要的数据。
5.关闭DatagramSocket* @author Administrator**/
public class UdpServer1 {public static void main(String[] args)throws Exception{boolean flag=true;DatagramSocket server=new DatagramSocket(3000);byte buf[]=new byte[100];int length=buf.length;DatagramPacket receivepacket=new DatagramPacket(buf,length);while(flag){//3.使用创建好的接收数据包的对象调用receive(DatagramPacket p)将接收到的数据包保存在空的数据包。server.receive(receivepacket);//4.通过DatagramPacket提供的【拆包方法】getXXXX方法从接收数据包中取出需要的数据。byte data[]=receivepacket.getData();int datalength=receivepacket.getLength();String clientip=receivepacket.getAddress().getHostAddress();int clientport=receivepacket.getPort();String info=new String(data,0,datalength);System.out.println("服务器端从客户端接收的数据是:"+info);}//5.关闭DatagramSocketserver.close();}
}

5.URL与URI的区别?
URI,是uniform resource identifier,统一资源标识符,用来唯一的标识一个资源。
Web上可用的每种资源如HTML文档、图像、视频片段、程序等都是一个来URI来定位的URI一般由三部组成:
①访问资源的命名机制
②存放资源的主机名
③资源自身的名称,由路径表示,着重强调于资源。

URL是uniform resource locator,统一资源定位器,它是一种具体的URI,即URL可以用来标识一个资源,而且还指明了如何locate这个资源。
URL是Internet上用来描述信息资源的字符串,主要用在各种WWW客户程序和服务器程序上,特别是著名的Mosaic。采用URL可以用一种统一的格式来描述各种信息资源,包括文件、服务器的地址和目录等。
URL一般由三部组成:
①协议(或称为服务方式)
②存有该资源的主机IP地址(有时也包括端口号)
③主机资源的具体地址。如目录和文件名等

URN,uniform resource name,统一资源命名,是通过名字来标识资源,比如mailto:java-net@java.sun.com。

URI是以一种抽象的,高层次概念定义统一资源标识,而URL和URN则是具体的资源标识的方式。URL和URN都是一种URI。笼统地说,每个 URL 都是 URI,但不一定每个 URI 都是 URL。这是因为 URI 还包括一个子类,即统一资源名称 (URN),它命名资源但不指定如何定位资源。上面的 mailto、news 和 isbn URI 都是 URN 的示例。

在Java的URI中,一个URI实例可以代表绝对的,也可以是相对的,只要它符合URI的语法规则。而URL类则不仅符合语义,还包含了定位该资源的信息,因此它不能是相对的。在Java类库中,URI类不包含任何访问资源的方法,它唯一的作用就是解析。相反的是,URL类可以打开一个到达资源的流。

java基础----网络编程相关推荐

  1. JAVA基础 网络编程

    JAVA基础 网络编程 网络我们每天都会用到的,在我们生活中占的地位也在不断的提高,我们下面就简单了解下网络编程的内容. 想要学习网络编程,首先就需要了解网络编程包含哪些内容. 网络编程包括 IP节点 ...

  2. 学习笔记-java基础-网络编程

    刚在培训机构学习完JAVA基础和WEB,感觉边学边忘.就把这作为记忆的笔记,我也不知道要不要记笔记,写在本子上太耗费时间了. 一.要想实现网络通信,首先要解决两个问题: ①:如何从网络中定位到一台或多 ...

  3. 黑马程序员——java基础---网络编程

    ------<a href="http://www.itheima.com" target="blank">Java培训.Android培训.iOS ...

  4. java基础-网络编程

    1.网络模型: OSI参考模型.TCP/IP参考模型 数据传输的过程:向下走:封包    向上走:拆包 向上走一直拆包,直到得到数据. 2.网络通讯要素 ip地址.端口号.传输协议 Ip和端口用来找对 ...

  5. java基础网络编程

    利用网络,实现两台计算机之间的互相联通.交互. 网络编程有两类: UDP 一种无连接的传输层协议.无连接:指不需要知道对方在不在,只负责发数据传输出去,而对方可能不在,数据便会丢失,所以是不稳定的. ...

  6. 黑马程序员——Java基础——网络编程1

    ------- android培训.java培训.期待与您交流! ---------- 网络编程1 一.获取IP     网络编程主要在传输层 :TCP(Transmission Control Pr ...

  7. Java基础(网络编程基础)

    1.软件结构 C/S:客户端和服务器(QQ.微信) B/S:浏览器和服务器(火狐.IE.谷歌) 2.网络通信协议 网络通信协议: 通过计算机网络可以使多台计算机实现连接,位于同一个网络中的计算机在进行 ...

  8. Java基础——网络编程

    一.网路编程知识 意义:过去我们IO流是把本地的文件传递而已,网络编程是把自己电脑的数据传递给另一台电脑,并且回馈信息.这是数据通讯 1.通讯三要素 1.1 IP地址 (1)获取对方主机IP 1.2 ...

  9. IT十八掌Java基础 网络编程

    网络编程 计算机网络 是指将地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来,在网络操作系统,网络管理软件及网络通信协议的管理和协调下,实现资源共享和信息传递的计算机系统. 网 ...

最新文章

  1. php union all,Union与Union All的区别
  2. 入门 | CNN也能用于NLP任务,一文简述文本分类任务的7个模型
  3. 【学习笔记-集合】HashMap 源码浅析
  4. Linux下main函数带参数问题和atoi函数详解
  5. 点击图片弹出固定或自适应窗口
  6. 从高排到低变成小楼梯儿歌_幼儿早教三字儿歌,帮助宝宝启蒙学说话
  7. [Go] 函数/方法 的 变参
  8. nvidia显卡驱动,cuda,和cudnn版本
  9. JSP和Thymeleaf
  10. 服务器网站常用端口号,web服务器常用端口号
  11. java经典算法(八)---zws
  12. python怎么加逗号_Python 逗号的巧用
  13. 个人笔记:kali firefox安装hackbar插件
  14. 搭建多节点Linux环境
  15. Unet(pytorch)——制作自己的数据集(二分类)
  16. 墙裂推荐,Python开发者不容错过的7个VS Code扩展
  17. 彻底搞懂python函数2
  18. 关于python数字的一种下划线奇怪写法
  19. LTE与VOLTE基础知识(1)
  20. 数据库分类及常用数据库

热门文章

  1. vue-router详解
  2. 【专题3:电子工程师 之 上位机】 之 【44.使用ffmpeg对视频解码、视频像素和尺寸转换、重采样】
  3. 我和Python从相识到相知再到相爱的故事
  4. win10卸载oracle11g
  5. 页面添加锚点的三种方式
  6. QQ英文邮箱注册教程
  7. css基础知识十:介绍一下CSS中的Grid网格布局?
  8. python摸鱼小游戏:小鸟管道游戏【送源码】
  9. Jmeter书中不会教你的(20)——快递时效查询实战1场景编写思路
  10. vue项目xlsx导入