栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Day 67

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Day 67

_UDP通信程序联系
  1. 按照下面的要求实现程序:

    • UDP发送数据:数据来自于键盘,直到输入的数据是886,发送数据结束
    • UDP接收数据:因为接收端不知道发送端什么时候停止发送,故采取死循环接收
  2. package demo22;
    
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.net.DatagramPacket;
    import java.net.DatagramSocket;
    import java.net.InetAddress;
    import java.net.SocketException;
    
    
    public class Send_Demo {
        public static void main(String[] args) {
            
    
            // DatagramSocket建立发送点
            BufferedReader br = null;
            try {
                DatagramSocket ds = new DatagramSocket();
    
                // 键盘录入发送数据
                // 此处的字节缓冲流只能用InputStreamRead,不能使用其子类FileRead
                br = new BufferedReader(new InputStreamReader(System.in));
                String line;
    
                while ((line = br.readLine()) != null) {
                    if ("886".equals(line)) {
                        break;
                    }
                    // 创建数据,比把数据打包
                    // 将输入的数据编码成比特字符进行传输
                    byte[] bytes = line.getBytes();
    
                    // 调用DatagramPacket将数据打包
                        
                    // 获取目的地的IP地址
                    InetAddress inetAddress = InetAddress.getByName("192.168.10.3");
                    DatagramPacket dp = new DatagramPacket(bytes, bytes.length, inetAddress, 11111);
    
                    // 发送数据
                    ds.send(dp);
                }
                // 关闭发送端
                ds.close();
            } catch (SocketException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
    ==========================================
    package demo22;
    
    import java.io.IOException;
    import java.net.DatagramPacket;
    import java.net.DatagramSocket;
    import java.net.SocketException;
    
    public class Receive_Demo {
        public static void main(String[] args) {
            
            // 建立接受点
            try {
                DatagramSocket ds = new DatagramSocket(11111);
    
                // 采用死循环接收数据,直达接收到886关闭接收端
                while (true) {
                    // 创建用于接收的数据包
                    byte[] bytes = new byte[1024];
                    DatagramPacket dp = new DatagramPacket(bytes, bytes.length);
    
                    // 调用DatagramSocket类接收数据
                    ds.receive(dp);
    
                    // 将接收到的数据解码成String类型
                    int len = dp.getLength();
                    String receiveData = new String(bytes, 0, len);
    
                    // 如果接收到886则跳出死循环
                    if (receiveData.equals("886")) {
                        break;
                    }
    
                    // 将接受到的数据在控制台输出
                    System.out.println("接收到的数据:" + receiveData);
                }
    
                // 关闭接收端
                ds.close();
            } catch (SocketException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
    
        }
    }
    ========================================
    hello
    world
    java
    你好
    
    Process finished with exit code 130
    ========================================
    接收到的数据:hello
    接收到的数据:world
    接收到的数据:java
    接收到的数据:你好
    
    Process finished with exit code 130
    
_TCP发送数据
  1. 创建客户端的Socket对象(Socket)

  2. 获取输出流,写数据

  3. 释放资源

  4. package demo23;
    
    import java.io.IOException;
    import java.io.OutputStream;
    import java.net.Socket;
    
    public class Client_Demo {
        public static void main(String[] args) {
            
    
            // 创建客户端的Socket对象(Socket)
            
            try {
                Socket socket = new Socket("192.168.10.3", 10000);
    
                // 获取输出流,写数据
                
                OutputStream os = socket.getOutputStream();
                os.write("hello world java".getBytes());
    
                // 释放资源
                os.close();
    
            } catch (IOException e) {
                e.printStackTrace();
            }
    
    
        }
    
    }
    
_TCP接收数据
  1. 接收数据的步骤:

    • 创建服务器端的Socket对象(ServerSocket)
    • 获取输入流,读取数据,并把数据显示在控制台上
    • 释放资源
  2. package demo23;
    
    import java.io.IOException;
    import java.io.InputStream;
    import java.net.ServerSocket;
    import java.net.Socket;
    
    public class Server_Demo {
        public static void main(String[] args) {
            
    
            // 创建服务器端的Socket对象(ServerSocket)
            try {
                ServerSocket ss = new ServerSocket(10000);
    
                // 获取输入流
                
                Socket socket = ss.accept();
    
                // 读取数据
                
                InputStream is = socket.getInputStream();
                byte[] bytes = new byte[1024];
                
                int len = is.read(bytes);   // 实际读取到的为字节长度
                String data = new String(bytes, 0, len);
    
                // 并把数据显示在控制台上
                System.out.println("发送的数据为:" + data);
                
                // 释放资源
                ss.close();
                socket.close();
    
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
    
_TCP通信程序练习1
  1. 练习1

    • 客户端:发送数据,接收服务器反馈

    • 服务器:接收数据,给出反馈

    • package demo23;
      
      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 P_Server_Demo {
          public static void main(String[] args) {
              
      
              // 创建发送端对象ServerSocket
              try {
                  ServerSocket ss = new ServerSocket(6666);
      
                  // 获取输入流
                  Socket accept = ss.accept();
      
                  // 读取数据
                  InputStream is = accept.getInputStream();
                  byte[] bytes = new byte[1024];  // 一次读取1024个字节
                  int len = is.read(bytes);
      
                  // 将读取的数据转换成String 类型
                  String data = new String(bytes, 0, len);
      
                  System.out.println("用户所发送的数据为:" + data);
      
                  // 服务器发送反馈信息
                  OutputStream os = accept.getOutputStream();
                  os.write("消息已收到".getBytes());
      
                  // 释放资源
                  os.close();
                  ss.close();
      
              } catch (IOException e) {
                  e.printStackTrace();
              }
          }
      }
      -------------------------------------------
      package demo23;
      
      import java.io.IOException;
      import java.io.InputStream;
      import java.io.OutputStream;
      import java.net.Socket;
      
      public class P_Client_Demo {
          public static void main(String[] args) {
              
      
              // 创建发送端对象Socket对象
              try {
                  Socket socket = new Socket("192.168.10.3",6666);
      
                  // 获取数据流
                  OutputStream os = socket.getOutputStream();
      
                  // 编写需要发送的消息,并编码成比特数据
                  byte[] bytes = "xx 我爱你".getBytes();
      
                  // 用字符流发送数据
                  
                  os.write(bytes);
      
                  // 接收服务器发来的反馈信息
                  InputStream is = socket.getInputStream();
                  byte[] bytes1 = new byte[1024];
                  int len = is.read(bytes1);
      
                  // 将服务器反馈的信息解码成String类型
                  String R_data = new String(bytes1, 0, len);
      
                  // 将反馈信息在控制台输出
                  System.out.println("服务器:" + R_data);
      
                  // 释放资源
                  socket.close();
                  is.close();
      
              } catch (IOException e) {
                  e.printStackTrace();
              }
      
          }
      }
      ===================================
      用户所发送的数据为:xx 我爱你
      
      Process finished with exit code 0
      ===================================
      服务器:消息已收到
      
      Process finished with exit code 0
      
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/873930.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号