Java基础-网络编程

03-27 1852阅读

文章目录

    • 1.网络相关概念
        • 1.网络通信
        • 2.网络
        • 3.IP地址
        • 4.域名和端口
          • 域名
          • 端口号
          • 5.网络协议
          • 6.TCP和UDP
            • TCP协议
            • **UDP协议**
            • TCP VS UDP
            • 2.网络编程
                • 1.InetAddress
                  • 1.基本介绍
                  • 2.代码实例
                  • 2.Socket
                    • 1.基本介绍
                    • 3.Tcp字节流编程
                      • 1.客户端与服务器端的信息传输
                      • 案例一
                      • 代码实例
                      • 案例二
                      • 代码实例
                      • 案例三
                      • 代码实例
                      • 2.网络上传文件
                      • 案例
                      • 代码实例
                      • 3.netstat指令
                      • 4.Tcp网络通讯的秘密
                      • 4.UDP网络通讯编程(了解)
                        • 1.基本流程
                        • 2.原理示意图
                        • 案例
                        • 代码实例
                        • 5.网络编程作业
                        • 作业一
                          • 题目
                          • 代码实例
                          • 作业二
                            • 题目
                            • 代码实例
                            • 作业三
                              • 题目
                              • 代码实例

                                1.网络相关概念

                                1.网络通信
                                1. **概念:**两台设备之间通过网络实现数据传输
                                2. **网络通信:**将数据通过网络从一台设备传输到另一台设备
                                3. java.net包下面提供了一系列的接口

                                Java基础-网络编程

                                2.网络
                                1. 概念:两台或多台设备通过一定物理设备连接起来构成了网络
                                2. 根据网络的覆盖范围可以分为
                                  1. 局域网
                                  2. 城域网
                                  3. 广域网
                                3.IP地址
                                1. 概念:用于唯一标识网络中的每台计算机/主机Java基础-网络编程
                                2. **查看ip地址:**ipconfigJava基础-网络编程
                                3. **ip地址的表示形式:**点分十进制 xx.xx.xx.xx
                                4. **每一个十进制数的范围:**0到255
                                5. **ip地址的组成:**网络地址+主机地址
                                6. 一个字节Byte等于8个bit
                                7. ipv6是16个字节
                                8. ip地址分类Java基础-网络编程
                                4.域名和端口
                                域名
                                1. www.baidu.com
                                2. 好处:方便记忆
                                3. 概念:将ip地址映射为域名,使用http协议
                                端口号
                                1. 概念:用于标识计算机上某个特定的网络程序
                                2. 表示形式:以整数形式0到65535
                                3. 0到1024已经被占用,比如ssh 22, ftp 21, smtp 25, http 80
                                4. 常见的网络程序端口号
                                  1. tomcat:8080
                                  2. mysql:3306
                                  3. oracle:1521
                                  4. sqlsever:1433
                                5. 如果一个ip地址有多个应用,可以将其部署在不同的端口上,以ip+端口号的形式访问Java基础-网络编程
                                5.网络协议
                                1. 概念:在网络编程中,数据的组织形式就是协议Java基础-网络编程
                                2. 网络通信协议模型Java基础-网络编程
                                6.TCP和UDP
                                TCP协议

                                Java基础-网络编程

                                UDP协议

                                Java基础-网络编程

                                TCP VS UDP

                                Java基础-网络编程

                                2.网络编程

                                1.InetAddress
                                1.基本介绍

                                InetAddress对象实际上就是主机名/域名 + ip地址

                                Java基础-网络编程

                                2.代码实例
                                package Internet_;
                                import java.net.InetAddress;
                                import java.net.UnknownHostException;
                                /**
                                 * @author 孙显圣
                                 * @version 1.0
                                 */
                                public class InetAddress_ {
                                    public static void main(String[] args) throws UnknownHostException {
                                        //获取InetAddress对象的三种方式
                                        //1.获取主机的
                                        InetAddress localHost = InetAddress.getLocalHost();
                                        System.out.println(localHost);
                                        //2.根据主机名获取
                                        InetAddress byName = InetAddress.getByName("LAPTOP-JA1NFVEM");
                                        System.out.println(byName);
                                        //3.根据域名获取
                                        InetAddress byName1 = InetAddress.getByName("www.sunxiansheng.cn");
                                        System.out.println(byName1);
                                        //根据InetAddress对象获取主机名/域名 + ip
                                        System.out.println(byName1.getHostName() + byName1.getHostAddress());
                                    }
                                }
                                

                                Java基础-网络编程

                                2.Socket
                                1.基本介绍
                                1. 基于客户端–服务器端的网络通信
                                2. 底层使用的是Tcp/Ip协议
                                3. 应用场景举例:客户端发送数据,服务端接受并显示控制台
                                4. 基于socket的Tcp编程:

                                Java基础-网络编程

                                Java基础-网络编程

                                3.Tcp字节流编程

                                Java基础-网络编程

                                1.客户端与服务器端的信息传输
                                案例一

                                Java基础-网络编程

                                代码实例
                                1. 客户端

                                  package Internet_;
                                  import java.io.IOException;
                                  import java.io.OutputStream;
                                  import java.net.InetAddress;
                                  import java.net.Socket;
                                  /**
                                   * @author 孙显圣
                                   * @version 1.0
                                   */
                                  public class Tcp_1_cilent {
                                      public static void main(String[] args) throws IOException {
                                          //链接本机的9999端口,并获取socket
                                          Socket socket = new Socket(InetAddress.getLocalHost().getHostAddress(), 9999);
                                          //使用IO字节流来传入数据
                                          OutputStream outputStream = socket.getOutputStream();
                                          outputStream.write("你好世界".getBytes());
                                          //关闭IO流和socket
                                          outputStream.close();
                                          socket.close();
                                      }
                                  }
                                  
                                2. 服务器端

                                  package Internet_;
                                  import java.io.IOException;
                                  import java.io.InputStream;
                                  import java.net.ServerSocket;
                                  import java.net.Socket;
                                  /**
                                   * @author 孙显圣
                                   * @version 1.0
                                   */
                                  public class Tcp_1_server {
                                      public static void main(String[] args) throws IOException {
                                          //创建一个本机端口9999监听
                                          ServerSocket serverSocket = new ServerSocket(9999);
                                          //如果客户端链接成功,则返回服务器端的socket
                                          Socket socket = serverSocket.accept();
                                          //使用IO流来获取数据
                                          InputStream inputStream = socket.getInputStream();
                                          //设置缓冲区
                                          byte[] bytes = new byte[100];
                                          //设置读取的长度
                                          int len = 0;
                                          //开始读取
                                          while ((len = inputStream.read(bytes)) != -1) {
                                              System.out.println(new String(bytes, 0, len)); //输出数据
                                          }
                                          
                                          //关闭
                                          inputStream.close();
                                          socket.close();
                                          serverSocket.close();
                                      }
                                  }
                                  
                                案例二

                                Java基础-网络编程

                                Java基础-网络编程

                                代码实例
                                1. 客户端

                                  package Internet_;
                                  import java.io.IOException;
                                  import java.io.InputStream;
                                  import java.io.OutputStream;
                                  import java.net.InetAddress;
                                  import java.net.Socket;
                                  /**
                                   * @author 孙显圣
                                   * @version 1.0
                                   */
                                  public class Tcp_2_cilent {
                                      public static void main(String[] args) throws IOException {
                                          //链接本机9999端口
                                          Socket socket = new Socket(InetAddress.getLocalHost(), 9999);
                                          //使用IO流发送数据
                                          OutputStream outputStream = socket.getOutputStream();
                                          outputStream.write("hello,server".getBytes());
                                          //结束标记
                                          socket.shutdownOutput();
                                          //读取服务器端发送的信息
                                          InputStream inputStream = socket.getInputStream();
                                          byte[] bytes = new byte[100];
                                          int len = 0;
                                          while ((len = inputStream.read(bytes)) != -1) {
                                              System.out.println(new String(bytes, 0, len));
                                          }
                                          //关闭
                                          inputStream.close();
                                          outputStream.close();
                                          socket.close();
                                      }
                                  }
                                  
                                2. 服务器端

                                  package Internet_;
                                  import java.io.IOException;
                                  import java.io.InputStream;
                                  import java.io.OutputStream;
                                  import java.net.ServerSocket;
                                  import java.net.Socket;
                                  /**
                                   * @author 孙显圣
                                   * @version 1.0
                                   */
                                  public class Tcp_2_server {
                                      public static void main(String[] args) throws IOException {
                                          //创建端口监听
                                          ServerSocket serverSocket = new ServerSocket(9999);
                                          //如果链接成功,返回socket
                                          Socket socket = serverSocket.accept();
                                          //接受信息并输出,然后回发信息
                                          InputStream inputStream = socket.getInputStream();
                                          byte[] bytes = new byte[100];
                                          int len = 0;
                                          int flag = 0; //记录是否读取到
                                          while ((len = inputStream.read(bytes)) != -1) {
                                              if (len > 0) {
                                                  flag ++;
                                              }
                                              System.out.println(new String(bytes, 0, len));
                                          }
                                          //结束标记
                                          socket.shutdownInput();
                                          OutputStream outputStream = null;
                                          if (flag > 0) { //读取到了
                                              //向客户端发送信息
                                              outputStream = socket.getOutputStream();
                                              outputStream.write("hello,cilent".getBytes());
                                          }
                                          //关闭
                                          inputStream.close();
                                          outputStream.close();
                                          socket.close();
                                          serverSocket.close();
                                      }
                                  }
                                  
                                3. 注意:结束标记在Tcp字节流编程中并不是必须的!!!

                                案例三

                                Java基础-网络编程

                                代码实例
                                1. 客户端

                                  package Internet_;
                                  import java.io.*;
                                  import java.net.InetAddress;
                                  import java.net.Socket;
                                  /**
                                   * @author 孙显圣
                                   * @version 1.0
                                   */
                                  public class Tcp_3_cilent {
                                      public static void main(String[] args) throws IOException {
                                          //链接本机9999端口
                                          Socket socket = new Socket(InetAddress.getLocalHost(), 9999);
                                          //使用IO流发送数据
                                          OutputStream outputStream = socket.getOutputStream();
                                          //使用转换流转成Writer
                                          BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(outputStream));
                                          bufferedWriter.write("你好,服务器端");
                                          //1.字符流需要使用这个作为结束标志
                                          bufferedWriter.newLine();
                                          //2.使用字符流需要刷新
                                          bufferedWriter.flush();
                                          //接受服务器端信息
                                          InputStream inputStream = socket.getInputStream();
                                          //转换为字符流
                                          BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
                                          //读取信息
                                          System.out.println(bufferedReader.readLine());
                                          //关闭
                                          bufferedReader.close();
                                          bufferedWriter.close();
                                          socket.close();
                                      }
                                  }
                                  
                                2. 服务器端

                                  package Internet_;
                                  import java.io.*;
                                  import java.net.ServerSocket;
                                  import java.net.Socket;
                                  /**
                                   * @author 孙显圣
                                   * @version 1.0
                                   */
                                  public class Tcp_3_server {
                                      public static void main(String[] args) throws IOException {
                                          //创建端口监听
                                          ServerSocket serverSocket = new ServerSocket(9999);
                                          //如果链接成功返回socket
                                          Socket socket = serverSocket.accept();
                                          //接受消息
                                          InputStream inputStream = socket.getInputStream();
                                          //转换为字符流
                                          BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
                                          //读取信息
                                          System.out.println(bufferedReader.readLine());
                                          BufferedWriter bufferedWriter = null;
                                          OutputStream outputStream = socket.getOutputStream();
                                          //转换为字符流
                                          bufferedWriter = new BufferedWriter(new OutputStreamWriter(outputStream));
                                          bufferedWriter.write("你好,客户端");
                                          //1.字符流使用这个作为结束标志
                                          bufferedWriter.newLine();
                                          //2.字符流需要刷新数据
                                          bufferedWriter.flush();
                                          //关闭
                                          bufferedWriter.close();
                                          bufferedReader.close();
                                          socket.close();
                                          serverSocket.close();
                                      }
                                  }
                                  
                                2.网络上传文件
                                案例

                                Java基础-网络编程

                                代码实例
                                1. 客户端

                                  package Internet_;
                                  import java.io.*;
                                  import java.net.InetAddress;
                                  import java.net.Socket;
                                  /**
                                   * @author 孙显圣
                                   * @version 1.0
                                   */
                                  public class Tcp_4_cilent {
                                      public static void main(String[] args) throws IOException {
                                          //链接本机8888端口
                                          Socket socket = new Socket(InetAddress.getLocalHost(), 8888);
                                          //字节流发送图片到服务器端
                                          OutputStream outputStream = socket.getOutputStream();
                                          //读取本地图片
                                          BufferedInputStream bufferedInputStream = new BufferedInputStream(new FileInputStream("e:\\1.png"));
                                          //设置缓冲
                                          byte[] bytes = new byte[1024];
                                          //设置读取长度
                                          int len = 0;
                                          while ((len = bufferedInputStream.read(bytes)) != -1) {
                                              //发送到服务器
                                              outputStream.write(bytes, 0, len);
                                          }
                                          //设置结束标志
                                          socket.shutdownOutput();
                                          //接收到服务器端发送的收到图片再退出
                                          InputStream inputStream = socket.getInputStream();
                                          //设置缓冲
                                          byte[] bytes1 = new byte[100];
                                          //记录长度
                                          int len1 = 0;
                                          while ((len1 = inputStream.read(bytes1)) != -1) {
                                              System.out.println(new String(bytes1, 0, len1));
                                          }
                                          //关闭
                                          bufferedInputStream.close();
                                          outputStream.close();
                                          socket.close();
                                      }
                                  }
                                  
                                2. 服务器端

                                  package Internet_;
                                  import java.io.*;
                                  import java.net.ServerSocket;
                                  import java.net.Socket;
                                  /**
                                   * @author 孙显圣
                                   * @version 1.0
                                   */
                                  public class Tcp_4_server {
                                      public static void main(String[] args) throws IOException {
                                          //监听8888端口
                                          ServerSocket serverSocket = new ServerSocket(8888);
                                          //如果链接成功则返回socket
                                          Socket socket = serverSocket.accept();
                                          //接收客户端字节流数据
                                          InputStream inputStream = socket.getInputStream();
                                          //设置缓冲区
                                          byte[] bytes = new byte[1024];
                                          //设置长度
                                          int len = 0;
                                          //创建字节流
                                          BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(new FileOutputStream("src\\image\\1.png"));
                                          while ((len = inputStream.read(bytes)) != -1) {
                                              //存储在本地的src/1.png下
                                              //写入内容
                                              bufferedOutputStream.write(bytes, 0, len);
                                          }
                                          //向客户端发送,收到图片
                                          OutputStream outputStream = socket.getOutputStream();
                                          outputStream.write("收到图片".getBytes());
                                          //结束标志
                                          socket.shutdownOutput();
                                          //关闭
                                          outputStream.close();
                                          bufferedOutputStream.close();
                                          inputStream.close();
                                          socket.close();
                                          serverSocket.close();
                                      }
                                  }
                                  
                                3.netstat指令
                                1. netstat -an 可以查看当前主机网络情况,包括端口监听情况和网络连接情况
                                2. netstat -an | more可以分页显示,按空格是下一页
                                3. netstat -anb可以查看哪个应用在监听
                                4. listening表示某个端口在监听
                                5. 本机地址是本机的ip地址+端口号
                                6. 外部地址是连接到本机的ip地址+端口号
                                7. 可以输出ctrl + c退出指令

                                Java基础-网络编程

                                4.Tcp网络通讯的秘密
                                1. 当客户端连接到服务器的时候,实际上客户端也是通过一个端口和服务器进行通讯的,这个端口的Tcp/Ip来分配的,是随机的
                                2. 示意图Java基础-网络编程
                                4.UDP网络通讯编程(了解)
                                1.基本流程
                                1. 核心的两个类,DatagramSocket与DatagramPacket
                                2. 建立发送端,接收端(没有服务端和客户端的概念)
                                3. 发送数据前,建立数据包 DatagramPacket对象
                                4. 调用DatagramSocket的发送,接受方法
                                5. 关闭DatagramSocket

                                Java基础-网络编程

                                2.原理示意图

                                Java基础-网络编程

                                案例

                                Java基础-网络编程

                                代码实例
                                1. 发送方

                                  package Internet_;
                                  import java.io.IOException;
                                  import java.net.DatagramPacket;
                                  import java.net.DatagramSocket;
                                  import java.net.InetAddress;
                                  /**
                                   * @author 孙显圣
                                   * @version 1.0
                                   */
                                  public class Udp_1_send {
                                      public static void main(String[] args) throws IOException {
                                          //获取一个socket并指定接受信息的端口
                                          DatagramSocket datagramSocket = new DatagramSocket(9998);
                                          //装包,并指定发送的主机号和端口号
                                          byte[] bytes = "明天吃火锅吗".getBytes();
                                          DatagramPacket datagramPacket = new DatagramPacket(bytes, bytes.length, InetAddress.getLocalHost(), 9999);
                                          //发送包
                                          datagramSocket.send(datagramPacket);
                                          //接受信息
                                          //创建一个包
                                          byte[] bytes1 = new byte[1024]; //创建字节数组接收
                                          DatagramPacket datagramPacket1 = new DatagramPacket(bytes1, bytes1.length);
                                          //接受包
                                          datagramSocket.receive(datagramPacket1);
                                          //输出包的内容
                                          System.out.println(new String(bytes1, 0, datagramPacket1.getLength()));
                                          //关闭
                                          datagramSocket.close();
                                      }
                                  }
                                  
                                2. 接收方

                                  package Internet_;
                                  import java.io.IOException;
                                  import java.net.DatagramPacket;
                                  import java.net.DatagramSocket;
                                  import java.net.InetAddress;
                                  /**
                                   * @author 孙显圣
                                   * @version 1.0
                                   */
                                  public class Udp_1_receive {
                                      public static void main(String[] args) throws IOException {
                                          //创建一个DatagramSocket
                                          DatagramSocket datagramSocket = new DatagramSocket(9999); //指定接受消息的端口号
                                          //创建一个DatagramPacket,用来存储信息
                                          byte[] bytes = new byte[1024]; //用来接受信息
                                          DatagramPacket datagramPacket = new DatagramPacket(bytes, bytes.length);
                                          //调用receive方法接受
                                          datagramSocket.receive(datagramPacket);
                                          //输出信息
                                          System.out.println(new String(bytes, 0, datagramPacket.getLength()));
                                          //发送信息给另一方
                                          //装包
                                          byte[] bytes1 = "明天吃火锅!!".getBytes();
                                          DatagramPacket datagramPacket1 = new DatagramPacket(bytes1, 0, bytes1.length, InetAddress.getLocalHost(), 9998);
                                          //发送
                                          datagramSocket.send(datagramPacket1);
                                          //关闭
                                          datagramSocket.close();
                                      }
                                  }
                                  
                                5.网络编程作业
                                作业一
                                题目

                                Java基础-网络编程

                                代码实例
                                1. 客户端

                                  package Internet_;
                                  import java.io.*;
                                  import java.net.InetAddress;
                                  import java.net.Socket;
                                  /**
                                   * @author 孙显圣
                                   * @version 1.0
                                   */
                                  public class Homework_1_cilent {
                                      public static void main(String[] args) throws IOException {
                                          //创建一个socket,指定要连接的ip加端口
                                          Socket socket = new Socket(InetAddress.getLocalHost(), 9999);
                                          //获取输出流,发送信息
                                          OutputStream outputStream = socket.getOutputStream();
                                          //转换成字符流
                                          BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(outputStream));
                                          //发送信息
                                  //        bufferedWriter.write("name");
                                  //        bufferedWriter.newLine();
                                  //        bufferedWriter.flush();
                                          bufferedWriter.write("hobby");
                                          bufferedWriter.newLine();
                                          bufferedWriter.flush();
                                  //        bufferedWriter.write("dsfsdfsf");
                                  //        bufferedWriter.newLine();
                                  //        bufferedWriter.flush();
                                          //获取输入流,读取信息
                                          InputStream inputStream = socket.getInputStream();
                                          //转化为字符流
                                          BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
                                          //读取信息
                                          String s = bufferedReader.readLine();
                                          //输出信息
                                          System.out.println(s);
                                          //关闭
                                          bufferedWriter.close();
                                          socket.close();
                                      }
                                  }
                                  
                                2. 服务器端

                                  package Internet_;
                                  import java.io.*;
                                  import java.net.ServerSocket;
                                  import java.net.Socket;
                                  /**
                                   * @author 孙显圣
                                   * @version 1.0
                                   */
                                  public class Homework_1_server {
                                      public static void main(String[] args) throws IOException {
                                          //开端口监听
                                          ServerSocket serverSocket = new ServerSocket(9999);
                                          //如果链接成功则返回socket
                                          Socket socket = serverSocket.accept();
                                          //获取输入流接受信息
                                          InputStream inputStream = socket.getInputStream();
                                          //转换成字符流
                                          BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
                                          //读取
                                          String s = bufferedReader.readLine();
                                          String res = "";
                                          //根据读取的信息写返回值
                                          switch (s) {
                                              case "name":
                                                  res = "我是孙显圣";
                                                  break;
                                              case "hobby":
                                                  res = "编写java程序";
                                                  break;
                                              default:
                                                  res = "你说啥呢";
                                          }
                                          //获取输出流
                                          OutputStream outputStream = socket.getOutputStream();
                                          //转换为字符流
                                          BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(outputStream));
                                          //返回
                                          bufferedWriter.write(res);
                                          bufferedWriter.newLine();
                                          bufferedWriter.flush();
                                          //关闭
                                          bufferedWriter.close();
                                          bufferedReader.close();
                                          socket.close();
                                          serverSocket.close();
                                      }
                                  }
                                  
                                作业二
                                题目

                                Java基础-网络编程

                                代码实例
                                1. 发送端

                                  package Internet_;
                                  import java.io.IOException;
                                  import java.net.*;
                                  /**
                                   * @author 孙显圣
                                   * @version 1.0
                                   */
                                  public class Homework_2_sender {
                                      public static void main(String[] args) throws IOException {
                                          //创建一个datagramsocket
                                          DatagramSocket datagramSocket = new DatagramSocket(8889);
                                          //创建一个数据包,并且进行装包
                                          byte[] bytes = "四大名著是哪些?".getBytes();
                                          DatagramPacket datagramPacket = new DatagramPacket(
                                                  bytes, 0, bytes.length, InetAddress.getLocalHost(), 8888);
                                          //发送数据
                                          datagramSocket.send(datagramPacket);
                                          //创建一个空包,接受数据包
                                          byte[] bytes1 = new byte[1024];
                                          DatagramPacket datagramPacket1 = new DatagramPacket(bytes1, bytes1.length);
                                          datagramSocket.receive(datagramPacket1);
                                          //读取数据
                                          System.out.println(new String(bytes1, 0, datagramPacket1.getLength()));
                                          //关闭
                                          datagramSocket.close();
                                      }
                                  }
                                  
                                2. 接收端

                                  package Internet_;
                                  import java.io.IOException;
                                  import java.net.DatagramPacket;
                                  import java.net.DatagramSocket;
                                  import java.net.InetAddress;
                                  /**
                                   * @author 孙显圣
                                   * @version 1.0
                                   */
                                  public class Homework_2_receive {
                                      public static void main(String[] args) throws IOException {
                                          //创建socket
                                          DatagramSocket datagramSocket = new DatagramSocket(8888);
                                          //创建一个空包
                                          byte[] bytes = new byte[1024];
                                          DatagramPacket datagramPacket = new DatagramPacket(bytes, bytes.length);
                                          //接受数据
                                          datagramSocket.receive(datagramPacket);
                                          //读取数据
                                          String s = new String(bytes, 0, datagramPacket.getLength());
                                          String res = new String();
                                          if ("四大名著是哪些?".equals(s)) {
                                              res = "四大名著是。。。";
                                          }
                                          else {
                                              res = "what?";
                                          }
                                          //返回信息
                                          //创建一个数据包
                                          byte[] bytes1 = res.getBytes();
                                          DatagramPacket datagramPacket1 = new DatagramPacket(
                                                  bytes1, 0, bytes1.length, InetAddress.getLocalHost(), 8889);
                                          //发送
                                          datagramSocket.send(datagramPacket1);
                                      }
                                  }
                                  
                                作业三
                                题目

                                Java基础-网络编程

                                代码实例
                                1. 客户端

                                  package Internet_;
                                  import java.io.*;
                                  import java.net.InetAddress;
                                  import java.net.Socket;
                                  import java.util.Scanner;
                                  /**
                                   * @author 孙显圣
                                   * @version 1.0
                                   */
                                  public class Homework_3_client {
                                      public static void main(String[] args) throws IOException {
                                          System.out.println("请输入一个音乐文件名");
                                          Scanner scanner = new Scanner(System.in);
                                          String next = scanner.next();
                                          //获取一个socket,连接服务器
                                          Socket socket = new Socket(InetAddress.getLocalHost(), 9999);
                                          //将文件名传入服务器
                                          OutputStream outputStream = socket.getOutputStream();
                                          outputStream.write(next.getBytes());
                                          //结束信息
                                          socket.shutdownOutput();
                                          //读取服务器端的信息
                                          InputStream inputStream = socket.getInputStream();
                                          //缓冲区
                                          byte[] bytes = new byte[1024];
                                          //长度
                                          int len = 0;
                                          BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(new FileOutputStream("src\\image\\gsls.mp3"));
                                          while ((len = inputStream.read(bytes)) != -1) {
                                              //将其保存到本地
                                              bufferedOutputStream.write(bytes, 0, len);
                                          }
                                          //关闭
                                          bufferedOutputStream.close();
                                          inputStream.close();
                                          outputStream.close();
                                          socket.close();
                                      }
                                  }
                                  
                                2. 服务器端

                                  package Internet_;
                                  import java.io.*;
                                  import java.net.ServerSocket;
                                  import java.net.Socket;
                                  /**
                                   * @author 孙显圣
                                   * @version 1.0
                                   */
                                  public class Homework_3_server {
                                      public static void main(String[] args) throws IOException {
                                          //开启服务器端口监听
                                          ServerSocket serverSocket = new ServerSocket(9999);
                                          //如果链接成功则返回一个socket对象
                                          Socket socket = serverSocket.accept();
                                          //接受信息
                                          InputStream inputStream = socket.getInputStream();
                                          //设置缓冲
                                          byte[] bytes = new byte[1024];
                                          //读取信息
                                          int len = inputStream.read(bytes);
                                          BufferedInputStream bufferedInputStream = null;
                                          OutputStream outputStream = null;
                                          //判断
                                          if (new String(bytes, 0, len).equals("高山流水")) {
                                              //判断文件是否存在,如果存在则发送到客户端
                                              File file = new File("e:\\高山流水.mp3");
                                              if (file.exists()) {
                                                  //读取文件内容
                                                  bufferedInputStream = new BufferedInputStream(new FileInputStream(file));
                                                  //缓冲区
                                                  byte[] bytes1 = new byte[1024];
                                                  //读取长度
                                                  int lens = 0;
                                                  while ((lens = bufferedInputStream.read(bytes1)) != -1) { //只要没有到文件末尾就继续读
                                                      //将读取到的数组发送给客户端
                                                      //获取输出流
                                                      outputStream = socket.getOutputStream();
                                                      outputStream.write(bytes1, 0, lens);
                                                  }
                                                  //结束语句
                                                  socket.shutdownOutput();
                                              }
                                          }
                                          //关闭
                                          bufferedInputStream.close();
                                          outputStream.close();
                                          inputStream.close();
                                          socket.close();
                                          serverSocket.close();
                                      }
                                  }
                                  
VPS购买请点击我

文章版权声明:除非注明,否则均为主机测评原创文章,转载或复制请以超链接形式并注明出处。

目录[+]