• {网络编程}和{多线程}应用:基于UDP协议【实现多发送方发送数据到同一个接收者】--练习


    要求:

    使用多线程实现多发送方发送数据到同一个接收者
    

    代码:

    发送端:可以在多台电脑上启动发送端,同时向接收端发送数据

    注意:匹配地址和端口号
    
    package com.qf.demo;
    
    import java.io.IOException;
    import java.net.DatagramPacket;
    import java.net.DatagramSocket;
    import java.net.InetAddress;
    import java.net.SocketException;
    import java.net.UnknownHostException;
    
    public class SendTest {
        public static void main(String[] args) {
            System.out.println("发送端已启动!");
    
            DatagramSocket socket=null;
    
            try {
                //1.创建socket对象
                socket=new DatagramSocket();
                //2.要发送的内容,可以用Scanner在后台输入
                String string="最近很烦,有时间陪我聊天吗?";
                DatagramPacket packet=new DatagramPacket(string.getBytes(), string.getBytes().length, InetAddress.getLocalHost(), 6677);
                //3.发送数据
                socket.send(packet);
            } catch (SocketException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (UnknownHostException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }finally {
                if(socket!=null){
                    socket.close();
                }
            }
        }
    }
    

    接收端:

    package com.qf.demo;
    
    import java.io.IOException;
    import java.net.DatagramPacket;
    import java.net.DatagramSocket;
    import java.net.SocketException;
    
    public class ReceiveTest {
    
        public static void main(String[] args) {
            // 1 socket
    
            try {
                DatagramSocket socket = new DatagramSocket(6677);
                while(true){
                    byte[] bs = new byte[1024];
                    DatagramPacket p = new DatagramPacket(bs, bs.length);
                    socket.receive(p);// 阻塞程序程序执行
                    MyThread thread = new MyThread(p);
                    thread.start();
                }
            } catch (SocketException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
    
        }
    }
    
    class MyThread extends Thread{
        DatagramPacket p = null;
        public MyThread(DatagramPacket p ) {
            this.p = p;
        }
        @Override
        public void run() {
    
            // 将接收到的数据进行 打印输出
            System.out.println("接收到的--发送端--数据:"+new String(p.getData(),0,p.getLength()));
        }
    }
    
    

    运行结果:

    接收端:
    这里写图片描述

  • 相关阅读:
    jvm 虚拟机参数_新生代内存分配
    jvm 虚拟机参数_堆内存分配
    Xshell 安装 Xftp
    使用 Xshell 连接 linux 系统
    linux 常用命令
    java JSON 和 Object 相互转换
    vsftp实现只能上传不能下载、删除权限配置
    从返回的HTTP Header信息中隐藏Apache的版本号及PHP的X-Powered-By信息
    在SecureCRT中无需输入密码登录Linux主机
    ssh 设置私钥实现两台linux主机无密码访问
  • 原文地址:https://www.cnblogs.com/TCB-Java/p/6809613.html
Copyright © 2020-2023  润新知