加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

【UDP通过多线程改进,在一个窗口中同时接收又发送】

发布时间:2020-12-15 05:32:12 所属栏目:Java 来源:网络整理
导读:package com.yjf.esupplier.common.test; import java.net.DatagramSocket; import java.net.SocketException; /** * @author shusheng * @description 通过多线程改进,在一个窗口中同时接收又发送 * @Email [email?protected] * @date 2019/1/10 23:12 */
package com.yjf.esupplier.common.test;

import java.net.DatagramSocket;
import java.net.SocketException;

/**
 * @author shusheng
 * @description 通过多线程改进,在一个窗口中同时接收又发送
 * @Email [email?protected]
 * @date 2019/1/10 23:12
 */
public class ChatRoom {

    public static void main(String[] args) throws SocketException {

        DatagramSocket dsSend = new DatagramSocket();
        DatagramSocket dsReceive = new DatagramSocket(12306);

        SendThread st = new SendThread(dsSend);
        ReceiveThread rt = new ReceiveThread(dsReceive);

        Thread t1 = new Thread(st);
        Thread t2 = new Thread(rt);

        t1.start();
        t2.start();
    }

}
package com.yjf.esupplier.common.test;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.util.Scanner;

/**
 * @author shusheng
 * @description
 * @Email [email?protected]
 * @date 2019/1/10 23:16
 */
public class SendThread implements Runnable {

    private DatagramSocket socket;

    public SendThread(DatagramSocket socket) {
        this.socket = socket;
    }

    @Override
    public void run() {
        try {
            String line = null;
            while (true) {
                Scanner scan = new Scanner(System.in);
                line = scan.nextLine();
                if (line.equals("exit")) {
                    break;
                }
                byte[] bytes = line.getBytes();
                DatagramPacket packet = new DatagramPacket(line.getBytes(),line.getBytes().length,InetAddress.getByName("localhost"),12306);
                socket.send(packet);
            }
            socket.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

}
package com.yjf.esupplier.common.test;

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

/**
 * @author shusheng
 * @description
 * @Email [email?protected]
 * @date 2019/1/10 23:27
 */
public class ReceiveThread implements Runnable {
    private DatagramSocket socket;

    public ReceiveThread(DatagramSocket socket) {
        this.socket = socket;
    }

    @Override
    public void run() {
        try {
            while (true) {
                // 创建一个包裹
                byte[] bys = new byte[1024];
                DatagramPacket dp = new DatagramPacket(bys,bys.length);

                // 接收数据
                socket.receive(dp);
                // 解析数据
                String ip = dp.getAddress().getHostAddress();
                String s = new String(dp.getData(),0,dp.getLength());
                System.out.println("from " + ip + " data is : " + s);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读