练习1

package com.cskaoyan.anotherPerson;

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;

/**
 * @AUTHOR ZHANG
 * @data 2021/2/25 16:55
 */
//专门用来接收数据
public class ReceiveTask implements Runnable {
    int port;
    // 创建接收端的UDpSocket对象
    DatagramSocket datagramSocket;

    public ReceiveTask(int port,DatagramSocket socket){
        this.port = port;
        this.datagramSocket = socket;
    }

    @Override
    public void run() {
        try {
            receiveData();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public void receiveData() throws IOException {
        while (true) {
            //================================================================================接收端接收
            // 用于接收 来自发送端的数据
            byte[] bytes = new byte[1024];
            DatagramPacket receivePacket = new DatagramPacket(bytes, 0, bytes.length);
            datagramSocket.receive(receivePacket);
            // int getLength()
            //          返回将要发送或接收到的数据的长度。
            int length = receivePacket.getLength();
            // int getOffset()
            //          返回将要发送或接收到的数据的偏移量。
            int offset = receivePacket.getOffset();
            String s = new String(bytes, offset, length);
            System.out.println(s);

            // 创建用于发送的数据报包
            if (s.equals("88")) {
                System.out.println("已退出");
                datagramSocket.close();
                break;
            }
        }
    }

}
在这里插入代码片
package com.cskaoyan.anotherPerson;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.*;

/**
 * @AUTHOR ZHANG
 * @data 2021/2/25 16:54
 */

//专门用来发送数据
public class SendTask implements Runnable {
    String ip;
    int port;
    BufferedReader br;
    DatagramSocket udpSocket;

    public SendTask(BufferedReader br, int port, DatagramSocket udpSocket, String ip) throws SocketException {
        this.br = br;
        this.port = port;
        this.udpSocket = udpSocket;
        this.ip = ip;
    }

    @Override
    public void run() {
        while (true) {
            try {
                String s;
                while ((s = br.readLine()) != null) {
                    sendData(udpSocket, s);
                }
                if (s.equals("88")) {
                    break;
                }
                udpSocket.close();

            } catch (IOException e) {
                e.printStackTrace();
            }
        }
//        udpSocket.close();
    }

    public void sendData(DatagramSocket udpSocket, String s) throws IOException {
        //================================================================================发送端发送
        // 把字符串数据封装成数据报包
        byte[] bytes = s.getBytes();
        InetAddress targetIp = InetAddress.getByName(ip);// 创建目标ip地址
        int targetPort = port;// 定义端口号
        // 创建数据报包
        DatagramPacket packet = new DatagramPacket(bytes, 0, bytes.length, targetIp, targetPort);

        // 发送数据报包 send(DatagramPacket p)   从此套接字发送数据报包。
        udpSocket.send(packet);
    }
}
oneperson
anotherperson
package com.cskaoyan.oneperson;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.DatagramSocket;
import java.net.SocketException;

/**
 * @AUTHOR ZHANG
 * @data 2021/2/25 16:54
 */
public class OnePerson {
    public static void main(String[] args) throws SocketException {
        DatagramSocket datagramSocket = new DatagramSocket(10000);
        SendTask sendTask = new SendTask(new BufferedReader(new InputStreamReader(System.in)),
                10086,new DatagramSocket(),"127.0.0.1");
        ReceiveTask receiveTask = new ReceiveTask(10000,datagramSocket);

        new Thread(sendTask).start();
        new Thread(receiveTask).start();

    }
}

package com.cskaoyan.anotherPerson;

import com.cskaoyan.oneperson.ReceiveTask;
import com.cskaoyan.oneperson.SendTask;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.DatagramSocket;
import java.net.SocketException;

/**
 * @AUTHOR ZHANG
 * @data 2021/2/25 16:55
 */
public class AnotherPerson {
    public static void main(String[] args) throws SocketException {
        DatagramSocket datagramSocket = new DatagramSocket(10086);
        SendTask sendTask = new SendTask(new BufferedReader(new InputStreamReader(System.in)),
                10000,datagramSocket,"127.0.0.1");
        ReceiveTask receiveTask = new ReceiveTask(10086,datagramSocket);

        new Thread(sendTask).start();
        new Thread(receiveTask).start();

    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Lacrimosa&L

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值