需求:
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()));
        }
    }
}
 
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号