再美不及姑娘你
又见西风上碧树

需求:

1.UDP发送数据:数据来源于键盘录入,直到输入的数据是over,发送数据结束

2.UDP接收数据:不知道发送端什么时候停止发送,采用死循环方式

分析:

发送端:

1.创建发送端DatagramSocket对象

2.使用BufferedReader对象完成封装键盘录入数据并判断当数据不是over时正常发送,是over时结束发送

3.创建数据并打包

DatagramPacket(byte[] buf, int length, InetAddress address, int port)构造用于发送长度的分组的数据报包length`指定主机上到指定的端口号

4.调用DatagramSocket对象发送数据

5.关闭发送端

接收端:

1.创建接收端的Socket对象(DatagramSocket)要绑定指定的端口号

2.创建一个数据包,用于接收数据要注意数据包的长度

3.调用DatagramSocket对象的方法接收数据

4.解析数据包,并把数据在控制台显示

Demo

send发送端类

package Demo042001;

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;

/*发送端
1.创建发送端DatagramSocket对象
2.使用BufferedReader对象完成封装键盘录入数据并判断当数据不是over时正常发送,是over时结束发送
3.创建数据并打包
DatagramPacket(byte[] buf, int length, InetAddress address, int port)` 构造用于发送长度的分组的数据报包 `length`指定主机上到指定的端口号
4.调用DatagramSocket对象发送数据
5.关闭发送端
* */
public class SendDemo {
  public static void main(String[] args) throws IOException {
      //创建发送端DatagramSocket对象
      DatagramSocket ds=new DatagramSocket();
      //2.使用BufferedReader对象完成封装键盘录入数据并判断当数据不是over时正常发送,是over时结束发送
      BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
      String line;
      while ((line=br.readLine())!=null){
          if ("over".equals(line)){
              break;
          }
          //创建数据并打包
          //DatagramPacket(byte[] buf, int length, InetAddress address, int port)
          // 构造用于发送长度的分组的数据报包 `length`指定主机上到指定的端口号
          byte[] bytes=line.getBytes();
          DatagramPacket dp=new DatagramPacket(bytes,bytes.length, InetAddress.getByName("cy"),12345);
          ds.send(dp);
      }
      //关闭发送端
      ds.close();


  }
}

Recive接收端类

package Demo042001;

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

/*接收端
1.创建接收端的Socket对象(DatagramSocket)要绑定指定的端口号
2.创建一个数据包,用于接收数据要注意数据包的长度
3.调用DatagramSocket对象的方法接收数据
4.解析数据包,并把数据在控制台显示

* */
public class ReciveDemo {
  public static void main(String[] args) throws IOException {
      //创建接收端的Socket对象(DatagramSocket)要绑定指定的端口号
      DatagramSocket ds = new DatagramSocket(12345);
      while (true) {
          //创建一个数据包,用于接收数据要注意数据包的长度
          byte[] bytes = new byte[1024];
          DatagramPacket dp = new DatagramPacket(bytes,bytes.length);
          //调用DatagramSocket对象的方法接收数据
          ds.receive(dp);
          //解析数据包,并把数据在控制台显示
          System.out.println("数据是:\r\n"+new String(dp.getData(),0,dp.getLength()));
      }
  }
}
 
posted on 2022-04-20 18:16  再美不及姑娘你  阅读(213)  评论(0)    收藏  举报