Skip to content

InetAddress

java
public class InetAddress extends Object
implements Serializable
  • getByName(String host) 通过传入主机名称来获取一个 IP 地址对象,host 可以是主机名,也可以是 IP 地址
  • getHostName() 获取主机名
  • getHostAddress() 获取 IP 地址
java
public static void main(String[] args) throws UnknownHostException {  
	// 创建 InetAddress 对象
    InetAddress address = InetAddress.getByName("DESKTOP-R1L7T0I");  
  
    String hostName = address.getHostName();  
    String hostAddress = address.getHostAddress();  
  
    System.out.println(hostName);  
    System.out.println(hostAddress);  
}

---
DESKTOP-R1L7T0I
192.168.0.108

DatagramPacket

是一个数据报包,是发送端到接受端传送数据的一种形式

public final class DatagramPacket extends Object

[!summary] DatagramPacket(byte[] buf, int length, InetAddress address, int port) ------ 构造方法 1 DatagramPacket(byte[] buf, int length) ------ 构造方法 2

getData ------ 从数据报包中获取到 byte[] 数据

DatagramSocket

public class DatagramSocket extends Object
implements Closeable

[!summary] DatagramSocket() ------DatagramSocket 类的无参构造方法 DatagramSocket(int port) ------DataqgramSocket 类的带参构造方法 send(DatagramPacket P) ------ 发送数据 close() ------ 关闭发送端

使用 UDP 协议传输数据

java
public class UDPSendDemo {                //发送端
    public static void main(String[] args) throws IOException {  
        DatagramSocket dgss = new DatagramSocket();        //创建发送端对象  
  
        byte[] b = "我是发送端".getBytes();  
        int length = b.length;  
        InetAddress address = InetAddress.getByName("192.168.0.108");      //创建一个ip地址对象  
        int port = 10086;                   //端口号  
        DatagramPacket dgp = new DatagramPacket(b, length, address, port);     //创建数据包  
  
        dgss.send(dgp);                  //调用send方法发送数据  
  
        dgss.close();                      //关闭发送端  
    }  
}
java
public class UDPReceiveDemo {              //接收端
    public static void main(String[] args) throws IOException {  
        DatagramSocket dgsr = new DatagramSocket(10086);     //创建接受对象  
  
        byte[] b = new byte[20];  
        int length = b.length;  
        DatagramPacket dgp = new DatagramPacket(b, length);    //创建一个用于接收的数据包  
  
        dgsr.receive(dgp);       //调用receive方法接收数据包  
  
        byte[] data = dgp.getData();    //解析数据包  
  
        int end = dgp.getLength();  
        String s = new String(data, 0, end);  
        System.out.println(s);        //把byte[]转成String并打印  
  
        dgsr.close();      //关闭接收端  
    }  
}


我是发送端

Socket

public class Socket extends Object
implements Closeable

[!summary] Socket(InetAddress address, int port) ------ 构造方法 1 Socket(String host, int port) ------ 构造方法 2

getOutputStream() ------ 返回此 Socket 对象的输出流 shutdownOutput() ------ 定义结束标志,告诉服务器端我不再发送数据了,你不要等了

使用 TCP 客户端发送数据

java
public class TCPClientDemo {  
    public static void main(String[] args) throws IOException {  
        Socket s = new Socket("DESKTOP-R1L7T0I", 10088);  //创建客户端Socket对象  
  
        OutputStream ops = s.getOutputStream();       //获取输出流  
        ops.write("我是TCP".getBytes());              //写数据  
  
        s.close();         //释放资源  
    }  
}


Exception in thread "main" java.net.ConnectException: Connection refused: connect

ServerSocket

public class ServereSocket extends Object
implements Closeable

[!summary] ServerSocket(int port) ------ 构造方法 1

accept() ------ 返回一个与该服务端端口匹配的客户端的 Socket 对象

使用 TCP 服务器端接收数据

java
public class TCPServerDemo {  
    public static void main(String[] args) throws IOException {  
        ServerSocket svs = new ServerSocket(10088);    //创建服务器端Socket对象  
  
        Socket s = svs.accept();    //倾听客户端并生成Socket对象  
  
        InputStream ips = s.getInputStream();    //获取输入流  
  
        byte[] b = new byte[1024];  
        int len = ips.read(b);     //读数据  
        String data = new String(b, 0, len);  
  
        System.out.println(data);  
  
        svs.close();  //释放掉svs的资源,那么s的资源也会自动释放  
    }  
}


等待接收

使用 TCP 协议传输数据

java
public class TCPServerDemo {  
    public static void main(String[] args) throws IOException {  
        ServerSocket svs = new ServerSocket(10088);     //创建服务器端Socket对象  
  
        Socket s = svs.accept();  
  
        InputStream ips = s.getInputStream();    //用输入流接收客户端发送的数据  
        byte[] b = new byte[1024];  
        int length = ips.read(b);  
        String data = new String(b, 0, length);  
  
        System.out.println("我收到了你的数据");  
        System.out.println("你的数据是:" + data);   //打印客户端发送的数据  
  
        OutputStream ops = s.getOutputStream();  
        ops.write("数据收到了".getBytes());    //接收到数据之后,给客户端进行反馈  
  
        svs.close();           //释放资源  
    }  
}


我收到了你的数据
你的数据是:服务器端,我来了
java
public class TCPClientDemo {  
    public static void main(String[] args) throws IOException {  
        Socket s=new Socket("DESKTOP-R1L7T0I",10088);   //创建客户端Socket对象  
  
        OutputStream ops = s.getOutputStream();   //获取输出流  
        ops.write("服务器端,我来了".getBytes());     //写数据  
  
        InputStream ips = s.getInputStream();   //获取输入流来接收对应对应端口的服务器反馈  
        byte[] b=new byte[1024];  
        int length=ips.read(b);  
        String data=new String(b,0,length);  //data就是服务器端反馈的数据  
  
        System.out.println(data);  
  
        s.close();        //释放资源  
    }  
}


数据收到了