Java--网络编程--UDP&作业练习

  1. UDP基本介绍:
  2. UDP网络编程:

    1. package com.model.udp;
      
      
      import java.io.IOException;
      import java.net.DatagramPacket;
      import java.net.DatagramSocket;
      import java.net.InetAddress;
      import java.lang.String;
      
      /**
       * @Description:测试类
       * @Author: 张紫韩
       * @Crete 2021/7/24 18:18
       * 演示UDP网络编程 发送端
       */
      public class UDPDemo01 {
          public static void main(String[] args) throws IOException {
              //1.定义一个连接对象,并设置发送端的端口号,准备接受和发送数据
              DatagramSocket socket = new DatagramSocket(9998);
              System.out.println("发送端,开始发送数据~");
      
      //       2. 定义一个  封装包对象,将数据封装到包中,指定数据,数据长度,接受端的IP地址,和端口号
              byte[] bytes = "明天一起吃火锅啊".getBytes();
              DatagramPacket packet = new DatagramPacket(bytes, bytes.length, InetAddress.getByName("192.168.56.1"),9999);
      //        3. 将封装好的包发送出去
              socket.send(packet);
              System.out.println("发送端,发送数据完成~");
      
              System.out.println("---------------发送端等待接收端回复~------------------");
              byte[] receive = new byte[1024];
              DatagramPacket receivePacket = new DatagramPacket(receive, receive.length);
              socket.receive(receivePacket);
              byte[] data = receivePacket.getData();
              int length = receivePacket.getLength();
              System.out.println("接受端回复的消息是:"+new String(data, 0, length));
              System.out.println("发送端接受完成~");
      
      //        4.关闭资源
              socket.close();
      
      
          }
      }

       

    2.  

      package com.model.udp;
      
      import java.io.IOException;
      import java.net.DatagramPacket;
      import java.net.DatagramSocket;
      import java.net.InetAddress;
      import java.net.SocketException;
      
      /**
       * @Description:测试类
       * @Author: 张紫韩
       * @Crete 2021/7/24 18:18
       * 演示UDP网络编程的实现,接收端
       */
      public class UDPDemo02 {
          public static void main(String[] args) throws IOException {
      //       1. 定义连接对象 socket
              DatagramSocket socket = new DatagramSocket(9999);
      
              //2.定义一个接受数据包的对象,并设置大小
              byte[] buff = new byte[1024];
              DatagramPacket packet = new DatagramPacket(buff, buff.length);
              System.out.println("接收端,等待接受数据~");
      //     3.  监听9999端口号,当有发送端 向9999端口号,发送数据时,程序会将数据接受到packet中,
      //        若没有发送端发送,则会一直等待
              socket.receive(packet);
      //       4.接受数据后,对数据包进行拆解
              byte[] data = packet.getData();
              int length = packet.getLength();
              System.out.println("发送端发送的数据是:"+new String(data,0,length));
              System.out.println("接收端,接收数据完成~");
      //        发送端回复一条消息
              System.out.println("-------------接受端开始回复发送端消息~----------------");
              byte[] bytes = "好的,明天一起去!".getBytes();
              DatagramPacket sendPacket = new DatagramPacket(buff, bytes.length, InetAddress.getByName("192.168.56.1"),9998);
              socket.send(sendPacket);
              System.out.println("接受端回复消息完成~");
      
      //      5。关闭资源
              socket.close();
      
          }
      }
  3. 网络编程作业1:

    1. package com.model.homwork;
      
      import java.io.*;
      import java.net.ServerSocket;
      import java.net.Socket;
      
      /**
       * @Description:测试类
       * @Author: 张紫韩
       * @Crete 2021/7/24 19:52
       * 网络编程作业1--服务端
       */
      public class HomeWorkDemo01 {
          public static void main(String[] args) throws IOException {
              ServerSocket serverSocket = new ServerSocket(8888);
              System.out.println("服务端,等待连接~");
              Socket socket = serverSocket.accept();
              System.out.println("服务端连接成功~");
              BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
              BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
      
              String line = reader.readLine();
              System.out.println("服务端接收的问题是:" + line);
              System.out.println("服务端回复问题~");
              char[] buff = null;
              if ("name".equals(line)) {
                  buff = "我是nova".toCharArray();
              } else if ("hobby".equals(line)) {
                  buff = "编写Java程序".toCharArray();
              } else {
                  buff = "你说啥呢".toCharArray();
              }
              System.out.println("服务端回复问题完成~");
              writer.write(buff);
              writer.newLine();
              writer.flush();
      
      
              reader.close();
              writer.close();
              socket.close();
              serverSocket.close();
      
      
          }
      
      }
    2. package com.model.homwork;
      
      import java.io.*;
      import java.net.InetAddress;
      import java.net.Socket;
      import java.net.UnknownHostException;
      import java.util.Scanner;
      
      /**
       * @Description:测试类
       * @Author: 张紫韩
       * @Crete 2021/7/24 19:52
       * 网络编程作业1--客户端
       */
      public class HomeWorkDemo02 {
          public static void main(String[] args) throws IOException {
              Socket socket = new Socket(InetAddress.getLocalHost(), 8888);
              BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
              BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
      
              System.out.println("请数据问题:");
              Scanner scanner = new Scanner(System.in);
              String next = scanner.next();
              writer.write(next.toCharArray());
              writer.newLine();
              writer.flush();
              String line = reader.readLine();
              System.out.println("服务端回复的问题是:" + line);
      
              reader.close();
              writer.close();
              socket.close();
      
          }
      
      }
  4. 网络编程作业2:

    1. package com.model.homwork;
      
      import java.io.IOException;
      import java.net.DatagramPacket;
      import java.net.DatagramSocket;
      import java.net.InetAddress;
      import java.net.SocketException;
      import java.nio.charset.StandardCharsets;
      import java.util.Scanner;
      
      /**
       * @Description:测试类
       * @Author: 张紫韩
       * @Crete 2021/7/24 20:39
       * UDP编程实现--发送端
       */
      public class HomeWorkDemo03 {
          public static void main(String[] args) throws IOException {
              DatagramSocket socket = new DatagramSocket(8889);
      
              Scanner scanner = new Scanner(System.in);
              System.out.println("发送端,输入你的问题:");
              String next = scanner.next();
              byte[] nextBytes = next.getBytes();
              DatagramPacket packet = new DatagramPacket(nextBytes, nextBytes.length,InetAddress.getLocalHost(),8888);
              socket.send(packet);
      
              System.out.println("等代服务端回复消息~");
              byte[] bytes = new byte[1024];
              DatagramPacket receivePacket = new DatagramPacket(bytes, bytes.length);
              socket.receive(receivePacket);
              byte[] data = receivePacket.getData();
              int length = receivePacket.getLength();
              System.out.println("接收端回复的消息是:"+new String(data, 0, length));
              socket.close();
          }
      }
    2. package com.model.homwork;
      
      import java.io.IOException;
      import java.net.DatagramPacket;
      import java.net.DatagramSocket;
      import java.net.InetAddress;
      import java.net.SocketException;
      
      /**
       * @Description:测试类
       * @Author: 张紫韩
       * @Crete 2021/7/24 20:39
       * UDP编程实现--接收端
       */
      public class HomeWorkDemo04 {
          public static void main(String[] args) throws IOException {
      
              DatagramSocket socket = new DatagramSocket(8888);
              System.out.println("接收端,等待发送端的问题~");
              byte[] bytes=new byte[1024];
              char[] chars=new char[1024];
              DatagramPacket packet = new DatagramPacket(bytes, bytes.length);
              socket.receive(packet);
              byte[] data = packet.getData();
              int length = packet.getLength();
              String s = new String(data, 0, length);
              System.out.println("发送端的问题是:"+s);
              byte[] buff=null;
              if (s.equals("四大名著有哪些")){
                  buff="红楼梦,三国演义,水浒传,西游记".getBytes();
              }else {
                  buff="what".getBytes();
              }
              DatagramPacket sendPacket = new DatagramPacket(buff, buff.length, InetAddress.getLocalHost(),8889);
              socket.send(sendPacket);
              System.out.println("回答完毕~");
              socket.close();
      
      
          }
      }
  5. 网络编程作业3:TCP文件下载:

    1. package com.model.homwork;
      
      import java.io.*;
      import java.net.ServerSocket;
      import java.net.Socket;
      
      /**
       * @Description:测试类
       * @Author: 张紫韩
       * @Crete 2021/7/24 21:11
       * 网络编程作业3--实现TCP文件下载--服务端
       * 使用包装流要进行flush()操作,且进行的flush()操作要在输入结束标志后面(socket.shutdownOutput()和 newLine())
       * 只有字符型的包装流才能使用 newLine()当做是输入的结束标志,且只能有readLine()进行读取
       */
      public class HomeWorkDemo05 {
          public static void main(String[] args) throws IOException {
              ServerSocket serverSocket = new ServerSocket(8888);
              System.out.println("服务端开始监听~");
              Socket socket = serverSocket.accept();
              BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
              String line = reader.readLine();
              System.out.println("客户端要下载的文件是:"+line);
      
              String fileName="";
              if (line.equals("a.jpg")){
                  fileName="D:\\qq\\IDEA\\IdeaProjects\\mianshi_project\\Java_project\\Java_wangluobiancheng\\" +
                          "src\\main\\resources\\file\\a.jpg";
      
              }else {
                  fileName="D:\\qq\\IDEA\\IdeaProjects\\mianshi_project\\Java_project\\Java_wangluobiancheng\\" +
                          "src\\main\\resources\\file\\b.jpg";
              }
              FileInputStream fileInputStream = new FileInputStream(fileName);
              ByteArrayOutputStream stream = new ByteArrayOutputStream();
              byte[] buff=new byte[1024];
              int readLine=0;
              while ((readLine=fileInputStream.read(buff))!=-1){
                  stream.write(buff, 0, readLine);
              }
      
              BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(socket.getOutputStream());
              bufferedOutputStream.write(stream.toByteArray());
              socket.shutdownOutput();//先做写入结束标志,在进行flush()刷新,
              bufferedOutputStream.flush();
              System.out.println("文件上传成功~");
      
              bufferedOutputStream.close();
              stream.close();
              fileInputStream.close();
              reader.close();
              socket.close();
              serverSocket.close();
      
      
      
          }
      }
    2. package com.model.homwork;
      
      import java.io.*;
      import java.net.InetAddress;
      import java.net.Socket;
      import java.util.Scanner;
      
      /**
       * @Description:测试类
       * @Author: 张紫韩
       * @Crete 2021/7/24 21:11
       * 网络编程作业3--实现TCP文件下载--客户端
       */
      public class HomeWorkDemo06 {
          public static void main(String[] args) throws IOException {
              Socket socket = new Socket(InetAddress.getLocalHost(),8888);
              System.out.println("客户端连接成功~");
              Scanner scanner = new Scanner(System.in);
              System.out.println("输入你要下载的文件名:");
              String next = scanner.next();
              BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
              writer.write(next);
              writer.newLine();//先做newLine()结束标志,在仅从flush()刷新
              writer.flush();
              System.out.println("客户端等待服务端的下载~");
      
              BufferedInputStream inputStream = new BufferedInputStream(socket.getInputStream());
              ByteArrayOutputStream stream=new ByteArrayOutputStream();
              byte[] buff=new byte[1024];
              int readLine=0;
              while ((readLine=inputStream.read(buff))!=-1){
                  stream.write(buff, 0, readLine);
              }
      
              String fileName="D:\\qq\\IDEA\\IdeaProjects\\mianshi_project\\Java_project\\Java_wangluobiancheng\\" +
                      "src\\main\\resources\\file\\c.jpg";
      
              FileOutputStream fileOutputStream = new FileOutputStream(fileName);
              fileOutputStream.write(stream.toByteArray());
              System.out.println("文件下载成功~");
              fileOutputStream.close();
              stream.close();
              inputStream.close();
              writer.close();
              scanner.close();
              socket.close();
      
          }
      }

       

       

        
posted @ 2021-07-24 22:06  张紫韩  阅读(95)  评论(0编辑  收藏  举报