目录
1、Java网络编程----InetAddress类
-
InetAddress类的使用
java.net 包类InetAddress 此类表示互联网协议(IP)地址。
public class InetAddress implements java.net.Serializable
InetAddress类的构造方法
缺省修饰符 InetAddress(){}
我们在自己的Java程序中是不能通过new+构造方法的方式创建出InetAddress类对象。
我们就需要使用下面这两个静态方法来得到InetAddress类对象。
static InetAddress getLocalHost()返回包含有本机IP地址的InetAddress对象。
static InetAddress getByName(String host)根据域名得到包含有该域名对应Ip地址的InetAddress对象。
实例方法
String getHostAddress()返回IP地址字符串
String getHostName()获得此IP地址的主机名
public class InetAddressTest { public static void main(String[] args) throws Exception { //得到本机的ip地址和计算机名 //得到包含有本机ip地址和InetAddress对象 InetAddress localHost = InetAddress.getLocalHost(); //得到本机ip地址 String hostAddress = localHost.getHostAddress(); System.out.println(hostAddress); //得到本机的计算机名 String hostName = localHost.getHostName(); System.out.println(hostName); //得到百度的ip地址和计算机名 String host1 = "www.baidu.com";//不安全 String host = "baidu.com"; InetAddress baidu = InetAddress.getByName(host); String hostAddress1 = baidu.getHostAddress(); System.out.println(hostAddress1); String hostName1 = baidu.getHostName(); System.out.println(hostName1); } }
2、URL与URI的区别
-
URL与URI的区别
URI,统一支援标识符(Uniform Resorce Identifier,URI),表示的是web上每一种可用的资源,如HTML文档,图像,视频片段,程序等都由一个URI进行标识的。
URI通常由三部分组成
-
资源的命名机制;
-
存放资源的主机名;
-
资源自身的名称;
URL是URI的一个子集。它是(Uniform Resource Locator)的缩写,译为“统一资源定位符”。采用URL可以用一种统一的格式来描述各种信息资源,包括文件,服务器的地址和目录等。URL是URI概念的一种实现方式。
URL的格式有三部分组成:
-
第一部分是协议(或称为服务方式)用“://”符号隔开
-
第二部分是存有该资源的主机IP地址(有时也包括端口号)。用“/”符号隔开
-
第三部分是主机资源的具体地址,如目录和文件名等。用“/”符号隔开
例如:https://www.baidu.com/index.html---资源访问地址
从上面的例子来看,你可能觉得URI和URL可能是相同的概念,其实并不是,URI和URL都定义了资源是什么,但URL还定义了该如何访问资源。URL是一种具体的URI,它是URI的一个子集,它不仅唯一标识资源,而且还提供了定位改资源的信息。URI是一种语义上的抽象概念,可以是绝对的,也可以是相对的,而URL则必须提供足够的信息来定位,是绝对的。
-
3、Java网络编程----URL类(访问网络资源)
-
URL类的构造方法
URL(String spec)从String表示形成一个URL对象。
URL(String protocol,String host,int port,String file)创建URL从指定对象protocol,host,port和file。
实例方法
URLConnection openConnection()返回一个URLConnection实例,表示与URL引用的远程对象的URL。
InputStream openStream()打开与此URL,并返回一个InputStream,以便从该连接读取。
public class URLTest { public static void main(String[] args) throws Exception { File file = new File("E:" + File.separator + "20220202" + File.separator + "test.jpg"); String path = "https://img-home.csdnimg.cn/images/20221207093454.jpg"; URL url = new URL(path); //创建输入流 InputStream is = url.openStream(); //创建输出流 FileOutputStream fileOutputStream = new FileOutputStream(file, true); //保存读取来的具体数据的字节数组 byte[] bytes = new byte[1024]; int temp = 0; //读取数据 while ((temp = is.read(bytes)) != -1) { fileOutputStream.write(bytes, 0, temp); } fileOutputStream.close(); is.close(); } }
4、基于TCP协议的通信协议
-
什么是TCP协议?
TCP---传输控制协议(有连接的协议)
优点:保证数据安全可靠
缺点:消耗大,效率低
-
TCP协议三次握手
TCP协议在通信的时候,要求通信的双方先建立连接(面向有连接的协议)。在建立连接的过程中需要经过三次握手才能完成连接的建立。
-
第一次握手:Client将标志位置SYN为1,随机产生一个值seq=J,并将该数据包发送给Server,Client进入SYN_SENT状态,等待Server确认。【Client给Server发送创建连接的请求】
-
第二次握手:Server收到数据包后有标志位SYN=1直到Client请求建立连接,Server将标志位SYN和ACK都置为1,ack=J+1,随机产生一个值seq=K,并将该数据包发送给Client以确认连接请求,Server进入SYN_RCVD状态。【Server被Client发送响应信息】
-
第三次握手:Client收到确认后,检查ack是否为J+1,ACK是否为1,如果正确则将标志位ACK置为1,ack=K+1,并将该数据包发送给Server,Server检查ack是否为K+1,ACK是否为1,如果正确则连接建立成功,Client和Server进入established状态,完成三次握手,随后Client与Server之间可以开始传输数据了。【Client给Server发送确认信息】
-
-
建立基于TCP的网络通讯程序需要使用的类和常用方法
上面建立基于TCP的网络通讯程序需要两套程序。
第一套程序,是建立客户端程序
java.net.Socket[套接字]创建基于TCP的通讯程序的客户端对象的java类
构造方法
Socket(InetAddress address,int port)创建流套接字并将其连接到指定IP地址的指定端口号。
Socket(String host,int port)创建流套接字并将其连接到指定主机上的指定端口号。
实例方法
OutputStream getOutputStream()返回客户端的输出流。【与服务器的输入流连接】
InputStream getInputStream()返回客户端的输入流。【与服务器的输出流连接】
void close()关闭客户端。
第二套程序,是链接服务器端程序
java.net.ServerSocket 创建基于TCP的通讯程序的服务器端对象的java类
构造方法
ServerSocket(int port)创建绑定到指定端口的服务器套接字
实例方法
Socket accept()监听要连接此套接字并接收它。【阻塞主线程运行】
void close()关闭服务器。
客户端程序的开发步骤:
-
创建客户端对象(Socket),连接服务器
-
通过客户端对象(Socket)的getInputSteam()/getOutputStream,得到输入输出流
-
通过得到的输入输出流对象调用read()/write()方法完成数据收发。
-
关闭输入输出流和客户端对象(Socket)。
服务器端程序的开发步骤:
-
创建服务器对象(ServerSocket),开启服务器。
-
通过服务器端对象(ServerSocket)的accept()方法,获得连接进入服务器的客户端对象(Socket)。
-
连接进入服务器的客户端对象(Socket)的getInputStream()/getOutputStream,到输入输出流。
-
通过得到的输入输出流对象调用read()/write()方法完成数据收发。
-
关闭输入输出流和客户端对象(Socket)以及服务器端对象(ServerSocket)。
-