Skip to content

InetAddress 代表IP地址

常用方法

名称说明
getLoaclHost()获取本机IP,返回inerAddress对象(静态)
getByName(String)根据ip | 域名返回inetAddress对象(静态)
getHostName()获取IP地址对象的主机名
getHostAddress()获取IP地址对象的地址信息
isReachable(int)在指定的毫秒内,判断主机与IP是否能联通

UDP - 发送&接收

DatagramSocket用于创建客户端和服务端

构造说明
DatagramSocket()创建客户端socket对象,随机分配端口号
DatagramSocket(int)创建服务端socket对象,指定端口号

发送、接收

方法说明
send(DatagramPacket)发送数据包
receive(DatagramPacket)接收数据包

DatagramPacket 创建数据包

构造说明
DatagramPacket(byte[],int,InetAddress,int)创建发出数据包对象
DatagramPacket(bytep[],int)创建接收数据包对象

发出数据对象包参数:

  1. 封装要发出的数据
  2. 要发出的数据大小
  3. 服务器IP
  4. 服务器端口

接收数据包参数:

  1. 接收数据包的大小(数据包最大不超过64kb)
  2. 数据包的大小

可以使用getLength()获取发送了多少信息

获取客户端信息

java
packet.getAddress().getHostName();  // 获取客户端主机名
packet.getAddress().getHostAddress();   // 获取客户端IP
packet.getPort();   // 获取客户端端口

使用while死循环包围(发送|接收)的程序

TCP - 通信

客户端

Socket实现客户端TCP

构造说明
Socket(String,int)跟还有指定的IP、端口与服务端建立连接、连接通过就获得客户端Socket
方法说明
getOutputStream()获得字节输出流对象
getInputStream()获得字节输入流对象

服务端

ServerSocket实现服务端TCP

构造说明
ServerSocket(int)为服务程序注册端口
方法说明
accept()阻塞等待客户端的连接请求,一旦与某个客户端成功连接,则返回服务端这边的Socket对象

getRemoteSocketAddress()通过这个方法可以获取客户端的IP信息

多收&多发:使用while循环包围发送 | 接收(I|O)的内容

连接成功后,客户端单方面退出连接后服务端也会输出异常并退出

服务端 1 — * 客户端

TCP解决单服务器与多客户端的发送信息问题

解决方法:使用多线程

java
public class ServerReaderThead extends Thread {
    private Socket socket;

    public ServerReaderThead(Socket socket) {
        this.socket = socket;
    }

    @Override
    public void run() {
        System.out.println("客户端" + socket.getRemoteSocketAddress() + "上线");
        DataInputStream dataInputStream = null;

        try {
            dataInputStream = new DataInputStream(socket.getInputStream());
        } catch (IOException e) {
            throw new RuntimeException(e);
        }

        while (true) {
            try {
                String s = dataInputStream.readUTF();
                System.out.println(s);
                System.out.println(socket.getRemoteSocketAddress());
                System.out.println("____________________________________");
            } catch (IOException e) {
                System.out.println("客户端" + socket.getRemoteSocketAddress() + "单方面退出");
                break;
            }
        }
    }
}

UDP、 TCP

UDP 用户数据报协议

特点:无连接、不可靠通信、效率高

不事先建立连接,数据按照包发(最大64kb),一包数据包含:自己的IP、程序端口、目的地IP、程序端口和数据

适合持续传输的业务

TCP 传输控制协议

特点:面向连接、可靠通信、效率低

保证在不可靠的信道上,实现可靠的传输

通过三次握手进行连接,通过四次挥手进行断开连接