Java进阶05网络编程

Java进阶05网络编程

概述

image
image
image

网络通信的要素

image
image
image
image

IP地址

image
image

package com.mingmao.net.ip;

import java.net.InetAddress;
import java.net.UnknownHostException;

//测试ip
public class TestIP {
    public static void main(String[] args) {
        try {
            //查询本机地址
            System.out.println(InetAddress.getByName("127.0.0.1"));//127.0.0.1
            System.out.println(InetAddress.getByName("localhost"));//localhost/127.0.0.1
            System.out.println(InetAddress.getLocalHost());//LAPTOP-RQ81VHUE/192.168.31.209

            //查询网络地址
            System.out.println(InetAddress.getByName("www.baidu.com"));//www.baidu.com/110.242.68.4

            //常用方法
            InetAddress inetAddress = InetAddress.getByName("www.baidu.com");
            System.out.println(inetAddress.getHostAddress());//110.242.68.4  ip
            System.out.println(inetAddress.getHostName());//www.baidu.com 域名

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

端口Port

image
image
打开任务管理器可查看程序的端口

package com.mingmao.net.port;

import java.net.InetSocketAddress;

public class TestPort {
    public static void main(String[] args) {
        InetSocketAddress inetSocketAddress = new InetSocketAddress("127.0.0.1", 8080);
        System.out.println(inetSocketAddress);///127.0.0.1:8080
        System.out.println(new InetSocketAddress("localhost",8080));//localhost/127.0.0.1:8080

        //常用方法
        System.out.println(inetSocketAddress.getAddress());///127.0.0.1 地址
        System.out.println(inetSocketAddress.getHostName());//activate.navicat.com
        System.out.println(inetSocketAddress.getPort());//8080 端口
    }
}

通信协议

image
image
image

TCP实现聊天

package com.mingmao.net.tcp;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;

//先启动服务端,再启动客户端
public class TcpServer01 {
    public static void main(String[] args) {
        ServerSocket serverSocket=null;
        Socket socket=null;
        InputStream inputStream=null;
        ByteArrayOutputStream byteArrayOutputStream=null;

        try {
            //1.我有一个地址
            serverSocket = new ServerSocket(9990);
            //不停地接收消息
            while (true){
                //2.等待客户端连接过来
                socket = serverSocket.accept();
                //3.读取客户端的消息
                inputStream = socket.getInputStream();
                //管道流
                byteArrayOutputStream = new ByteArrayOutputStream();
                byte[] bytes = new byte[1024];
                int len;
                while ((len=inputStream.read(bytes))!=-1){
                    byteArrayOutputStream.write(bytes,0,len);
                }
                System.out.println(byteArrayOutputStream.toString());

            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if(byteArrayOutputStream!=null){
                try {
                    byteArrayOutputStream.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }

            if(inputStream!=null){
                try {
                    inputStream.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }

            if(socket!=null){
                try {
                    socket.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }

            if(serverSocket!=null){
                try {
                    serverSocket.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}
package com.mingmao.net.tcp;

import java.io.IOException;
import java.io.OutputStream;
import java.net.InetAddress;
import java.net.Socket;

public class TcpClient01 {
    public static void main(String[] args) {
        Socket socket=null;
        OutputStream outputStream=null;

        try {
            //1.要知道服务器的地址
            InetAddress serverIp = InetAddress.getByName("127.0.0.1");
            int port=9990;
            //2.创建链接
            socket = new Socket(serverIp,port);
            //3.发送消息
            outputStream = socket.getOutputStream();
            outputStream.write("你好,java".getBytes());
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if(outputStream!=null){
                try {
                    outputStream.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }

            if(socket!=null){
                try {
                    socket.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

TCP文件上传实现

package com.mingmao.net.tcp;

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;

public class TcpServer02 {
    public static void main(String[] args) {
        ServerSocket serverSocket=null;
        Socket socket=null;
        InputStream inputStream=null;
        FileOutputStream fileOutputStream=null;
        OutputStream outputStream=null;

        try {
            serverSocket=new ServerSocket(9998);
            socket= serverSocket.accept();
            inputStream=socket.getInputStream();
            fileOutputStream=new FileOutputStream("D:\\file\\javatest\\JavaSE\\java进阶\\file\\pic\\caomeireceive.jpg");
            byte[] bytes = new byte[1024];
            int len;
            while ((len=inputStream.read(bytes))!=-1){
                fileOutputStream.write(bytes,0,len);
            }
            outputStream=socket.getOutputStream();
            outputStream.write("我接受完毕了,你可以断开了".getBytes());
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if(outputStream!=null){
                try {
                    outputStream.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if(fileOutputStream!=null){
                try {
                    fileOutputStream.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if(inputStream!=null){
                try {
                    inputStream.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if(socket!=null){
                try {
                    socket.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if(serverSocket!=null){
                try {
                    serverSocket.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}
package com.mingmao.net.tcp;

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

public class TcpClien02 {
    public static void main(String[] args) {
        Socket socket=null;
        int port=9998;
        OutputStream outputStream=null;
        FileInputStream fileInputStream=null;
        InputStream inputStream=null;
        ByteArrayOutputStream byteArrayOutputStream=null;

        try {
            socket=new Socket(InetAddress.getByName("127.0.0.1"),port);
            outputStream=socket.getOutputStream();
            fileInputStream=new FileInputStream("D:\\file\\javatest\\JavaSE\\java进阶\\file\\pic\\caomei.jpg");
            byte[] bytes = new byte[1024];
            int len;
            while ((len=fileInputStream.read(bytes))!=-1){
                outputStream.write(bytes,0,len);
            }
            socket.shutdownOutput();

            inputStream=socket.getInputStream();
            byteArrayOutputStream=new ByteArrayOutputStream();
            byte[] bytes1 = new byte[1024];
            int len1;
            while ((len1=inputStream.read(bytes1))!=-1){
               byteArrayOutputStream.write(bytes1,0,len1);
            }
            System.out.println(byteArrayOutputStream.toString());
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if(byteArrayOutputStream!=null){
                try {
                    byteArrayOutputStream.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if(inputStream!=null){
                try {
                    inputStream.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if(fileInputStream!=null){
                try {
                    fileInputStream.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if(outputStream!=null){
                try {
                    outputStream.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if(socket!=null){
                try {
                    socket.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

初识Tomcat

image
image
image
image

UDP消息发送

package com.mingmao.net.udp;

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

public class UdpServer01 {
    public static void main(String[] args) {
        DatagramSocket datagramSocket=null;
        DatagramPacket datagramPacket=null;

        try {
            //开放端口
            datagramSocket=new DatagramSocket(9090);
            //接收数据
            byte[] bytes = new byte[1024];
            datagramPacket=new DatagramPacket(bytes,0,bytes.length);
            datagramSocket.receive(datagramPacket);
            //输出数据
            System.out.println(new String(datagramPacket.getData(),0,datagramPacket.getLength()));
        } catch (IOException e) {
            e.printStackTrace();
        } finally {

            if(datagramSocket!=null){
                datagramSocket.close();
            }
        }
    }
}
package com.mingmao.net.udp;

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

public class UdpcCient01 {
    public static void main(String[] args) {
        DatagramSocket datagramSocket=null;
        DatagramPacket datagramPacket=null;

        try {
            //1.建立一个socket
            datagramSocket= new DatagramSocket();
            //2.建立包
            String msg="你好!";
            InetAddress localhost = InetAddress.getByName("localhost");
            int port=9090;
            datagramPacket=new DatagramPacket(msg.getBytes(),0,msg.getBytes().length,localhost,port);
            //3.发送包
            datagramSocket.send(datagramPacket);
        } catch (SocketException | UnknownHostException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if(datagramSocket!=null){
                datagramSocket.close();
            }
        }
    }
}

UDP聊天实现

package com.mingmao.net.udp;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;

public class UdpReceive01 {
    public static void main(String[] args) throws IOException {
        DatagramSocket datagramSocket = new DatagramSocket(9992);

        while (true){
            //接收
            byte[] bytes = new byte[1024];
            DatagramPacket datagramPacket = new DatagramPacket(bytes, 0, bytes.length);
            datagramSocket.receive(datagramPacket);
            System.out.println("对方:"+new String(datagramPacket.getData(),0,datagramPacket.getLength()));

            //发送
            InetAddress localhost = InetAddress.getByName("localhost");
            BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
            String msg = bufferedReader.readLine();
            int port=9991;
            DatagramPacket datagramPacket1 = new DatagramPacket(msg.getBytes(), 0, msg.getBytes().length, localhost, port);
            datagramSocket.send(datagramPacket1);
            //System.out.println("我:"+new String(datagramPacket1.getData(),0,datagramPacket1.getLength()));

            if((new String(datagramPacket.getData(),0,datagramPacket.getLength())).equals("拜拜")){
                break;
            }
        }
        datagramSocket.close();
    }
}
package com.mingmao.net.udp;

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

public class UdpSender01 {
    public static void main(String[] args) throws IOException {
        DatagramSocket datagramSocket = new DatagramSocket(9991);
        InetAddress localhost = InetAddress.getByName("localhost");
        int port=9992;

        while(true){
            //发送
            BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
            String msg = bufferedReader.readLine();
            DatagramPacket datagramPacket = new DatagramPacket(msg.getBytes(),0,msg.getBytes().length,localhost,port);
            datagramSocket.send(datagramPacket);
            //System.out.println("我:"+new String(datagramPacket.getData(),0,datagramPacket.getLength()));

            //接收
            byte[] bytes = new byte[1024];
            DatagramPacket datagramPacket1 = new DatagramPacket(bytes, 0, bytes.length);
            datagramSocket.receive(datagramPacket1);
            System.out.println("对方:"+new String(datagramPacket1.getData(),0,datagramPacket1.getLength()));

            if((new String(datagramPacket1.getData(),0,datagramPacket1.getLength())).equals("拜拜")){
                break;
            }
        }
        datagramSocket.close();
    }
}

UDP多线程聊天

package com.mingmao.net.udp;

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

public class TalkSend01 implements Runnable {
    DatagramSocket datagramSocket=null;
    BufferedReader bufferedReader=null;
    private int fromPort;
    private String toIp;
    private int toPort;

    public TalkSend01(int fromPort, String toIp, int toPort) {
        this.fromPort = fromPort;
        this.toIp = toIp;
        this.toPort = toPort;

        try {
            datagramSocket=new DatagramSocket(fromPort);
            bufferedReader=new BufferedReader(new InputStreamReader(System.in));
        } catch (SocketException e) {
            e.printStackTrace();
        }
    }

    @Override
    public void run() {
        while (true){
            try {
                String s = bufferedReader.readLine();
                DatagramPacket datagramPacket=new DatagramPacket(s.getBytes(),0,s.getBytes().length,InetAddress.getByName(toIp),toPort);
                datagramSocket.send(datagramPacket);
                if(s.equals("拜拜")){
                    break;
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

        try {
            bufferedReader.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
        datagramSocket.close();
    }
}
package com.mingmao.net.udp;

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

public class TalkReceive01 implements Runnable{
    DatagramSocket datagramSocket=null;
    private int port;
    private String msgFrom;

    public TalkReceive01(int port,String msgFrom) {
        this.port = port;
        this.msgFrom=msgFrom;

        try {
            datagramSocket=new DatagramSocket(port);
        } catch (SocketException e) {
            e.printStackTrace();
        }
    }

    @Override
    public void run() {
        while (true){
            try {
                byte[] bytes = new byte[1024];
                DatagramPacket datagramPacket = new DatagramPacket(bytes, 0, bytes.length);
                datagramSocket.receive(datagramPacket);
                System.out.println(msgFrom+":"+new String(datagramPacket.getData(),0,datagramPacket.getLength()));
                if((new String(datagramPacket.getData(),0,datagramPacket.getLength())).equals("拜拜")){
                    break;
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        datagramSocket.close();
    }
}
package com.mingmao.net.udp;

public class TalkStudent01 {
    public static void main(String[] args) {
        new Thread(new TalkSend01(9992,"localhost",9991)).start();
        new Thread(new TalkReceive01(9993,"老师")).start();
    }
}
package com.mingmao.net.udp;

public class TalkTeacher01 {
    public static void main(String[] args) {
       new Thread(new TalkSend01(9994,"localhost",9993)).start();
       new Thread(new TalkReceive01(9991,"学生")).start();
    }
}

URL下载网络资源

image

package com.mingmao.net.url;

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;

public class TestUrl {
    public static void main(String[] args) throws IOException {
        URL url = new URL("http://localhost:8080/helloworld/index.jsp?username=kuangshen&password=123");
        System.out.println(url.getProtocol());//http 协议
        System.out.println(url.getHost());//localhost 主机
        System.out.println(url.getPort());//8080 端口
        System.out.println(url.getPath());///helloworld/index.jsp 文件地址
        System.out.println(url.getFile());///helloworld/index.jsp?username=kuangshen&password=123 文件全路径
        System.out.println(url.getQuery());//username=kuangshen&password=123 参数

        //下载文件
        //1.下载地址
        URL url1 = new URL("https://m701.music.126.net/20210916175026/1afb80ca8c3442eb56c07c15af979c3c/jdyyaac/obj/w5rDlsOJwrLDjj7CmsOj/10820754288/1879/a287/9a79/9de460e3bc6123e7daaabdb8ec62647f.m4a");

        //2.连接到这个资源 http
        HttpURLConnection urlConnection = (HttpURLConnection) url1.openConnection();

        //3.下载
        InputStream inputStream = urlConnection.getInputStream();
        FileOutputStream fileOutputStream = new FileOutputStream("D:\\file\\javatest\\JavaSE\\java进阶\\file\\download\\test.m4a");
        byte[] bytes = new byte[1024];
        int len;
        while ((len=inputStream.read(bytes))!=-1){
            fileOutputStream.write(bytes,0,len);
        }
        fileOutputStream.close();
        inputStream.close();
        urlConnection.disconnect();
    }
}

学习视频

学习视频

posted @ 2021-09-16 17:30  明懋  阅读(32)  评论(0)    收藏  举报