网络编程

IP

		try {
            InetAddress ia = InetAddress.getByName("www.baidu.com");
            InetAddress myHost = InetAddress.getLocalHost();
            System.out.println(myHost); // 连带主机名与ip

            System.out.println("---------");

            System.out.println(ia.getHostAddress()); // 获取ip地址
            System.out.println(ia.getCanonicalHostName()); // 获取规范的名字
            System.out.println(ia.getHostName());

        } catch (UnknownHostException e) {
            e.printStackTrace();
        }

output:

LAPTOP-K7UPH2AE/192.168.0.102
---------
110.242.68.3
110.242.68.3
www.baidu.com

端口

public static void main(String[] args) {
        InetSocketAddress isa = new InetSocketAddress("www.baidu.com", 3306);

        InetAddress address = isa.getAddress();
        System.out.println(address);

        System.out.println(isa.getHostName());
        System.out.println(isa.getPort());

    }

output:

www.baidu.com/110.242.68.3
www.baidu.com
3306

通信协议

TCP聊天

客户端:

public static void main(String[] args) throws Exception {
        InetAddress ip = InetAddress.getByName("localhost");
        Socket socket = new Socket(ip, 9999);
        OutputStream os = socket.getOutputStream();
        os.write("你好,我叫王一赫,我们可以交个朋友吗?".getBytes());

        os.close();
        socket.close();
    }

服务端:

public static void main(String[] args) throws IOException {
        ServerSocket server = new ServerSocket(9999);
        Socket accept = server.accept();
        InputStream is = accept.getInputStream();

        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        byte[] buffer = new byte[1024];
        int len;
        while ((len = is.read(buffer)) != -1) {
            baos.write(buffer, 0, len);
        }

        System.out.println(baos);

        baos.close();
        is.close();
        accept.close();
        server.close();
    }

TCP文件上传

客户端

{
        Socket socket = new Socket(InetAddress.getByName("localhost"), 9000);
        OutputStream os = socket.getOutputStream();

        FileInputStream fis = new FileInputStream("2.jpg");
        byte[] buffer = new byte[1024];
        int len;
        while ((len = fis.read(buffer)) != -1) {
            os.write(buffer, 0, len);
        }

        socket.shutdownOutput();

        InputStream is = socket.getInputStream();
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        while ((len = is.read(buffer)) != -1) {
            baos.write(buffer, 0, len);
        }

        System.out.println(baos);

        baos.close();
        is.close();
        fis.close();
        os.close();
        socket.close();

}

服务端

{
        ServerSocket server = new ServerSocket(9000);
        Socket accept = server.accept();
        InputStream is = accept.getInputStream();

        FileOutputStream fos = new FileOutputStream("out.jpg");

        byte[] buffer = new byte[1024];
        int len;
        while ((len = is.read(buffer)) != -1) {
            fos.write(buffer, 0, len);
        }

        OutputStream os = accept.getOutputStream();
        os.write("我接受到了".getBytes());

        os.close();
        fos.close();
        is.close();
        accept.close();
        server.close();

}

UDP

UDP 消息发送

接收端

{

    public static void main(String[] args) throws Exception {
        DatagramSocket socket = new DatagramSocket(9900);
        byte[] data = new byte[1024];
        DatagramPacket packet = new DatagramPacket(data, 0, data.length);

        socket.receive(packet);

        System.out.println(packet.getAddress());
        System.out.println(new String(packet.getData(), 0, packet.getLength()));

        socket.close();
    }
}

发送端

{

    public static void main(String[] args) throws Exception {
        DatagramSocket socket = new DatagramSocket();
        String data = "你好,接收端";
        DatagramPacket packet = new DatagramPacket(data.getBytes(), 0, data.getBytes().length, InetAddress.getByName("localhost"), 9900);

        socket.send(packet);
        socket.close();
    }

}
上一篇:一篇文章带你深入理解 try-with-resource


下一篇:java IO String 每次读取一行工具类