Java网络编程

网络编程

1、IP

        InetAddress inetAddress = InetAddress.getByName("www.baidu.com");
        System.out.println(inetAddress);
        InetAddress inetAddress1 = InetAddress.getByName("localhost");
        System.out.println(inetAddress1);

2、端口

端口表示计算机上一个程序的进程

不同的进程有不同的端口!用来区分软件!

单个协议写端口号不能冲突

端口分类:

公有端口:0-1023

  • HTTP:80

  • HTTPs:443

  • FTP: 21

  • Telent: 23

程序注册端口:1024-49151,分配用户或者程序

  • Tomcat: 8080

  • MySQL: 3306

  • Oracle: 1521

动态、私有:49152-65536

netstat //查看端口

3、通信协议

协议:约定

4、文件上传

TCP客户端

public class TcpClient {
    public static void main(String[] args) throws Exception{
        FileInputStream fis = new FileInputStream("test.jpg");
        BufferedInputStream bis = new BufferedInputStream(fis);
        byte[] buffer = new byte[1024];
        int len = 0;
        InetAddress serVerIP = InetAddress.getByName("127.0.0.1");
        int port = 9999;
        Socket socket = new Socket(serVerIP,port);
        OutputStream os = socket.getOutputStream();
        while((len = bis.read(buffer))!= -1){
            os.write(buffer,0,len);
        }
        socket.shutdownOutput();
        InputStream is = socket.getInputStream();
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        byte[] buffer2 = new byte[1024];
        int len2 = 0;
        while((len2 = is.read(buffer2))!=-1){
            baos.write(buffer2,0,len2);
        }
        System.out.println(baos.toString());
        baos.close();
        is.close();
        os.close();
        socket.close();
    }
}

TCP服务端

public class TcpServer {
    public static void main(String[] args) throws Exception{
        ServerSocket serverSocket = new ServerSocket(9999);
        Socket socket = serverSocket.accept();
        InputStream is = socket.getInputStream();
//        BufferedReader br = new BufferedReader(new InputStreamReader(is));
//        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        FileOutputStream fos = new FileOutputStream("1.jpg");
        BufferedOutputStream bos = new BufferedOutputStream(fos);
        byte[] buffer = new byte[1024];
        int len = 0;
        while((len = is.read(buffer))!= -1){
            bos.write(buffer,0,len);
        }
        OutputStream os = socket.getOutputStream();
        os.write("接收完毕,可以断开".getBytes());
        bos.close();
        fos.close();
        is.close();
        socket.close();
        serverSocket.close();
    }
}

5、UDP发送消息

public class UdpClient {
    public static void main(String[] args) throws  Exception{
        DatagramSocket socket = new DatagramSocket();
        String msg = "你好";
        InetAddress inetAddress = InetAddress.getByName("localhost");
        int port = 9090;
        DatagramPacket packet = new DatagramPacket(msg.getBytes(), 0, msg.getBytes().length, inetAddress, port);
        socket.send(packet);
        socket.close();
    }
}
​
public class UdpServer {
    public static void main(String[] args)throws  Exception {
        DatagramSocket socket = new DatagramSocket(9090);
        byte[] buffer = new byte[1024];
        DatagramPacket packet = new DatagramPacket(buffer, 0, buffer.length);
        socket.receive(packet);
        System.out.println(packet.getAddress().getHostAddress());
        System.out.println(new String(packet.getData(),0,packet.getLength()));
        socket.close();
    }
}

6、实现既可以发,也可以收

public class TalkSend implements Runnable{
    DatagramSocket socket = null;
    BufferedReader br = null;
    private int fromPort;
    private String toIP;
    private int toPort;
​
    public TalkSend(int fromPort, String toIP, int toPort) {
        this.fromPort = fromPort;
        this.toIP = toIP;
        this.toPort = toPort;
​
        try {
            socket = new DatagramSocket(fromPort);
            br = new BufferedReader(new InputStreamReader(System.in));
        } catch (SocketException e) {
            e.printStackTrace();
        }
​
    }
​
    @Override
    public void run() {
        while (true){
            try {
                String msg =  br.readLine();
                byte[] data = msg.getBytes();
                DatagramPacket packet = new DatagramPacket(data, 0, data.length,new InetSocketAddress(this.toIP,this.toPort));
                socket.send(packet);
                if("bye".equals(msg)){
                    break;
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        socket.close();
    }
}
public class TalkReceiver implements Runnable{
    DatagramSocket socket = null;
    private int port;
    private String msgFrom;
​
    public TalkReceiver(int port, String msgFrom) {
        this.port = port;
        this.msgFrom = msgFrom;
        try {
            socket = new DatagramSocket(port);
        } catch (SocketException e) {
            e.printStackTrace();
        }
    }
​
    @Override
    public void run() {
        while(true){
            try {
                byte[] buffer = new byte[1024];
                DatagramPacket packet = new DatagramPacket(buffer, 0, buffer.length);
                socket.receive(packet);
                //System.out.println(packet.getAddress().getHostAddress());
                String receiveData = new String(packet.getData(),0,packet.getLength());
                System.out.println(msgFrom + ":"+ receiveData);
                if("bye".equals(receiveData)){
                    break;
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        socket.close();
    }
}
public class TalkStudent {
    public static void main(String[] args) {
        new Thread(new TalkSend(7777,"localhost",9999)).start();
        new Thread(new TalkReceiver(8888,"老师")).start();
    }
}
public class TalkTeacher {
    public static void main(String[] args) {
        new Thread(new TalkSend(5555,"localhost",8888)).start();
        new Thread(new TalkReceiver(9999,"学生")).start();
    }
}

7、URL

public class URLTest {
    public static void main(String[] args) throws Exception{
        URL url = new URL("https://m10.music.126.net/20200430215646/ce965084eb7259ac7415f084323a86e0/yyaac/515f/5653/540e/f5f2148657a9b5465016cdcf17a407d0.m4a");
        HttpURLConnection urlConnection = (HttpURLConnection)url.openConnection();
        InputStream is = urlConnection.getInputStream();
        FileOutputStream fos = new FileOutputStream("1.m4a");
        byte[] buffer = new byte[1024];
        int len = 0;
        while((len = is.read(buffer))!= -1){
            fos.write(buffer,0,len);
        }
        fos.close();
        is.close();
        urlConnection.disconnect();
    }
}
posted @ 2020-04-30 21:55  pengxiaowei  阅读(185)  评论(0)    收藏  举报