首页 /  技术专区  /  Java 宽屏模式 >

Java 网络编程

1. 网络概述

image.png

2. IP地址的组成

IP地址(Internet  Protocol)

唯一标识网络上的每一台计算机

IP地址的组成

32位,由4个8位二进制数组成

image.png

IP地址 = 网络地址 +主机地址

网络地址:标识计算机或网络设备所在的网段

主机地址:标识特定主机或网络设备image.png

3. IP地址的配置和检测

查看IP地址,检测网络是否畅通

查看本机的IP地址

ipconfig

测试网络是否通畅

ping  目标IP地址

4. DNS域名解析

访问网站时,为什么输入网址而不是IP地址?

DNS:Domain Name System,域名系统

域名系统(服务)协议(DNS)是一种分布式网络目录服务,主要用于域名与 IP 地址的相互转换,以及控制因特网的电子邮件的发送。

5. 网络服务器

通常指在网络环境下,具有较高计算能力,能够提供用户服务功能的计算机。

image.png

6. 网络服务器

网络通信协议

为在网络中不同的计算机之间进行通信而建立的规则、标准或约定的集合

TCP协议(Transmission Control Protocol 传输控制协议)

面向连接的、可靠的、基于字节流的传输通信协议

UDP协议(User Datagram Protocol 用户数据报协议)

无连接的协议,在传输数据之前,客户端和服务器并不建立和维护连接

image.png

7. Socket简介

什么是Socket?

image.png


通信链路的端点就被称为“套接字”(英文名Socket)

是提供给应用程序的接口

Socket的底层机制复杂,Java平台提供了一些简单的API,可以更简单有效的使用Socket开发而无需了解底层机制

8. 基于TCP协议的Socket编程

基于TCP协议的Socket网络通信

用来实现双向安全连接网络通信

Socket通信模型

进行网络通信时,Socket需要借助数据流来完成数据的传递工作

image.png

Socket网络编程一般可以分成如下步骤进行:

image.png

服务器端代码:

package com.liqinglin.test;

import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;

public class Server {
    public static void main(String[] args) {
        try {
            ServerSocket serverSocket = new ServerSocket(5000);
            Socket socket = serverSocket.accept();
            InputStream inputStream = socket.getInputStream();
            BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
            String info;
            while((info = bufferedReader.readLine()) != null){
                System.out.println(info);
            }

            socket.shutdownInput();
            OutputStream outputStream = socket.getOutputStream();
            String login = "登录成功";
            outputStream.write(login.getBytes());

            outputStream.close();
            bufferedReader.close();
            inputStream.close();
            socket.close();
            serverSocket.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

客户端代码:

package com.liqinglin.test;

import java.io.*;
import java.net.Socket;

public class Client {
    public static void main(String[] args) {
        try {
            Socket socket = new Socket("localhost", 5000);
            OutputStream outputStream = socket.getOutputStream();
            String info = "这是我要发送给你的一句话";
            outputStream.write(info.getBytes());

            socket.shutdownOutput();
            InputStream inputStream = socket.getInputStream();
            BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
            String login;
            while((login = bufferedReader.readLine()) != null){
                System.out.println(login);
            }

            inputStream.close();
            bufferedReader.close();
            outputStream.close();
            socket.close();
        } catch (IOException e) {
            e.printStackTrace();
        }

    }
}

9. 多线程处理多请求

如何实现多客户请求呢?

image.png

10. 基于UDP协议的Socket编程

image.png

DatagramPacket类

封装了数据报的数据、数据长度、目标地址和目标端口

DatagramSocket类

接收和发送DatagramPacket对象封装好的数据报

基于UDP协议的Socket网络编程步骤

image.png

服务器端代码:

package com.liqinglin.test;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;

public class Server {
    public static void main(String[] args) {
        byte[] strs = new byte[1024];
        DatagramPacket datagramPacket = new DatagramPacket(strs, strs.length);
        DatagramSocket datagramSocket = null;
        try {
            datagramSocket = new DatagramSocket(5000);
            datagramSocket.receive(datagramPacket);
            String str = new String(datagramPacket.getData(), 0, datagramPacket.getData().length);
            System.out.println(str);
        } catch (SocketException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally{
            datagramSocket.close();
        }
    }
}

客户端代码:

package com.liqinglin.test;

import java.io.IOException;
import java.net.*;

public class Client {
    public static void main(String[] args) {
        String str = "这是我要发送的一句话";
        byte[] strs = str.getBytes();
        DatagramSocket datagramSocket = null;

        try {
            InetAddress inetAddress = InetAddress.getByName("localhost");
            DatagramPacket datagramPacket = new DatagramPacket(strs, strs.length, inetAddress, 5000);
            datagramSocket = new DatagramSocket();
            datagramSocket.send(datagramPacket);
        } catch (UnknownHostException e) {
            e.printStackTrace();
        } catch (SocketException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            datagramSocket.close();
        }
    }
}




0/200
图片验证码