Java net主要知识提取

网络编程

Java提供了大量内置的网络操作功能,包含于java.net包中

通过这个包提供的类和接口,可以实现基于“流”的通信,或者基于“包”的通信

URL

  • URL统一资源定位符(Uniform Resource Locator) 的简称,URL表示Internet上某一资源的地址,通过URL,可以访问Internet
  • 浏览器通过解析给定的URL就可以在网络上查找相应的文件和其他资源

构造示例

URL url1 = new URL("https://www.baidu.com");
URL base = new URL("http://www.baidu.com");
URL url2 = new URL(base, "1.html");
URL url3 = new URL(base, '2.html');
URL url4 = new URL("http", "www.baidu.com", "1.html");
URL url5 = new URL("http", "www.baidu.com", "8080", "1.html");
  • 创建URL的时候可能会发生错误,系统会检测异常,这是受检异常
try {
    URL ...
} catch (MalformedURLException e) {
    e.printStackTrace();
}

内部方法

http://www.baidu.com:80/abc/123?abc=123
url1.getHost(); // www.baidu.com
url1.getPort(); // 80
url1.getPath(); // /abc/123
url1.getProtocal(); // http
uri1.getQuery(); // abc=123

事件

JEditorPane pane = new JEditorPane();
pane.setPage(location);
pane.addHyperLinkListener(new HyperLinkListner() {
    @Override
    public void HyperLinkUpdate(HyperLinkEvent e) {
        e.getUrl().toString(); // 得到地址
        e.getEventType(); // -> HyperLinkEvent.EventType.ACTIVITED
        // 有
        /**
        ACTIVITED
        ENTERED
        EXITED
        */
    }
})

IP

  • IP地址由32位或者128位的无符号数字构成,可以唯一确定Internet上的一台主机
  • java.net 包中的 “InetAddress“类可以用于表示网络中计算机的主机名和地址

构造方法

InetAddress address = InetAddress.getByName("www.baidu.com");
System.out.println(address); // -> xxx.xxx.xxx.xxx

端口

  • 端口是0~65535的一个数字

  • 大多数操作系统将1024内的端口号保留给系统服务,因此一般情况下不应该将这些端口指定为用户程序中的连接端口

  • 25 -> SMTP

  • 80 -> HTTP

  • 69 -> TFTP

  • 21 -> FTP

  • 23 -> Telnet

  • 53 -> DNS

  • ……

TCP/UDP

  • 通信过程中,进程必须按运输层的相关协议,建立进程间的逻辑通信的通路

  • 运输层使用的协议

    1. TCP
    2. UDP

    依照不同的协议,在运输层需要建立不同的套接字,将网络数据流连接到程序上

套接字

  • 套接字(Socket)是对网络通信介质的一种软件抽象,用来将网络数据流连接到程序上
  • 套接字是支撑TCP/IP通信的基本操作单元
    • 可以看做是不同主机之间的进程进行双向通行的端点
  • 套接字可以简化服务器和客户端之间的网络编程
  • 对于一个网络连接,连接两端的计算机中各有一个套接字,这两个套接字之间有一条网络线路
  • 服务端程序和客户端程序可以通过套接字打交道,忽略网络线路的硬件细节

HostA, hostB的通信过程

  • HostA创建Socket,设定IP和端口号,通过网络管理软件建立关系
  • HostB的网卡接受到数据后,网络管理软件将信息保存在本机对应的Socket中

Java中的套接字

  1. 流套接字 Socket, ServerSocket 用的是TCP
  2. 数据报套接字 DatagramSocket 用的是UDP

有连接的客户/服务器编程

建立简单的服务器
ServerSocket server = new ServerSocket(6666, 100); // 设定端口号和队列长度
Socket connection = server.accept(); // 等待客户端连接,连接成功返回Socket对象
ObjectInputStream input = new ObjectInputStream(connection.getInputStream());
ObjectOutputStream output = new ObjectOutputStream(connection.getOutputStream());
input.readObject(); 
output.writeObject();
connection.close();

// 可能会有两个异常
// BindException -> 端口号被占用
// IOException -> IO操作错误
建立简单的客户端
Socket connection = new Socket("110.110.110.100", 6666);
ObjectInputStream input = new ObjectInputStream(connection.getInputStream());
ObjectOutputStream output = new ObjectOutputStream(connection.getOutputStream());
connection.close();

// 可能会有两个异常
// UnknownHostException -> 未知的主机号
// IOException -> IO操作错误
一些方法
Socket s ...
s.getInetAddress(); // 获得ip地址等

无连接的客户/服务器编程

  • Java中DatagramSocket类使用UDP协议,在用户和服务器之间发送信息包
  • 数据包套接字主要包括以下两个类
    1. DatagramPacket: 表示要发送/接受的信息组成的数据包
    2. DatagramSocket: 表示客户和服务器之间的套接字,用于发送和接受数据包(DatagramPacket)
  • 异常: java.net.SocketException
建立简单的服务端
DatagramSocket socket = new DatagramSocket(6666); // 定义套接字 绑定本地的一个端口,等待客户端请求
byte[] buf = new byte[256]; // 分配一个字节类型的数组用于接受客户端的请求信息
DatagramPacket packet = new DatagramPacket(buf, 256); // 创建一个DatagramPacket用于接受信息
socket.receive(packet); // 在客户端的请求报道前一直等待
InetAddress address = packet.getAddress(); // 获得地址和端口号
int port = address.getPort();
packet = new DatagramPacket(buf, buf.length, address, port);
socket.send(packet); // 发送数据报
socket.close(); // 关闭socket
建立简单的客户端
DatagramSocket socket = new DatagramSocket();
byte[] buf = new byte[256];
DatagramPacket packet = new DatagramPacket(buf, 256, address, port);
socket.send(packet);
byte[] sendBuf = new byte[256];
packet = new DatagramPacket(sendBuf, 256);
socket.receive(packet); // 没有到就一直等待,实用程序设置时间限度
String received = new String(packet.getData(), 0);
/**
new String(byte[] buf, int offset, int length); // 字节数组 偏移位置 长度
byte data[] = received.getBytes(); // 字符串转化为byte[]
*/

System.out.println(received);

SSL

  • SSL - 安全网络通信协议
    • 为了提高网络通信的保密性和可靠性
    • 采用多种密钥对进行通信的数据加密,并且通过SSL握手协议对传输过程增加认证
    • 增加了安全性但是降低了传输效率

keytool

  • 密钥证书管理工具keytool
  • cmd中输入 keytool -help 可以查看有关指令

密钥库

  • 是一些密钥项的集合
    • 密钥项,由公钥,私钥和证书等组成
    • 每项密钥项都有一个别名

你可能感兴趣的:(java)