Java_UDP数据报举例

UDP数据报举例

张三和李四使用用户数据报(可用本地机模拟)互相发送和接收数据包,程序运行时"张三"所在主机在命令行输入数据发送给"李四"所在主机,将接收到的数据显示在命令行;同样,"李四"所在主机在命令行输入数据发送给"张三"所在主机,将接收到的数据显示在命令行的右侧。
在这里插入图片描述
在这里插入图片描述
ZhangSan.java

package UDP;

import java.net.*;
import java.util.*;

public class ZhangSan {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        Thread readData;
        ReceiveLetterForZhang receiver = new ReceiveLetterForZhang();
        try{
            readData = new Thread(receiver);
            readData.start();//负责接收信息的线程
            byte []buffer = new byte[1];
            InetAddress address = InetAddress.getByName("127.0.0.1");
            DatagramPacket dataPack = new DatagramPacket(buffer,buffer.length,address,666);
            DatagramSocket postman = new DatagramSocket();
            System.out.println("输入发送给李四的信息:");
            while (scanner.hasNext()){
                String mess = scanner.nextLine();
                buffer = mess.getBytes();
                if(mess.length()==0){
                    System.exit(0);
                }
                buffer = mess.getBytes();
                dataPack.setData(buffer);
                postman.send(dataPack);
                System.out.println("继续输入发送给李四的信息:");
            }
        }catch (Exception e){
            System.out.println(e);
        }
    }
}

class ReceiveLetterForZhang implements Runnable{

    @Override
    public void run() {
            DatagramPacket pack = null;
            DatagramSocket postman = null;

            byte data[] = new byte[8192];

            try{
                pack = new DatagramPacket(data,data.length);
                postman = new DatagramSocket(888);
            }catch (Exception e){ }

            while (true){
                if(postman==null){
                    break;
                }else {
                    try{
                        postman.receive(pack);
                        String message = new String(pack.getData(),0,pack.getLength());
                        System.out.println("收到:"+message);
                    }catch (Exception e){ }
                }
            }
    }
}

LiSi.java

package UDP;

import java.net.*;
import java.util.*;

public class LiSi {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        Thread readData;
        ReceiveLetterForLi receiver = new ReceiveLetterForLi();
        try{
            readData = new Thread(receiver);
            readData.start();//负责接收信息的线程
            byte []buffer = new byte[1];
            InetAddress address = InetAddress.getByName("127.0.0.1");
            DatagramPacket dataPack = new DatagramPacket(buffer,buffer.length,address,888);
            DatagramSocket postman = new DatagramSocket();
            System.out.println("输入发送给张三的信息:");
            while (scanner.hasNext()){
                String mess = scanner.nextLine();
                buffer = mess.getBytes();
                if(mess.length()==0){
                    System.exit(0);
                }
                buffer = mess.getBytes();
                dataPack.setData(buffer);
                postman.send(dataPack);
                System.out.println("继续输入发送给张三的信息");
            }
        }catch (Exception e){
            System.out.println(e);
        }
    }
}

class ReceiveLetterForLi implements Runnable{

    @Override
    public void run() {
        DatagramPacket pack = null;
        DatagramSocket postman = null;

        byte data[] = new byte[8192];
        try{
            pack = new DatagramPacket(data,data.length);
            postman = new DatagramSocket(666);
        }catch (Exception e){ }
        while (true){
            if(postman==null){
                break;
            }else {
                try{
                    postman.receive(pack);
                    String message = new String(pack.getData(),0,pack.getLength());
                    System.out.println("收到:"+message);
                }catch (Exception e){ }
            }
        }
    }
}
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值