栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

多线程优化的网络编程(UDP)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

多线程优化的网络编程(UDP)

废话不多说直接看代码 

定义发送端

package com.sky.wechat;

import java.io.IOException;
import java.net.*;
import java.util.Scanner;


public class SendTask implements Runnable{

    private int sendPort; //发送数据的端口

    public SendTask(int sendPort){
        this.sendPort = sendPort;
    }

    @Override
    public void run() {
        DatagramSocket ds = null;
        try {
             ds= new DatagramSocket();
            Scanner sc = new Scanner(System.in);

            while(true){
                String s = sc.nextLine();
                byte[] buf = s.getBytes();
                InetAddress address = InetAddress.getByName("127.0.0.1");
                DatagramPacket dp = new DatagramPacket(buf, buf.length,address,sendPort);
                ds.send(dp); //发送数据
            }

        } catch (SocketException | UnknownHostException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
           // ds.close();
        }
    }
}

定义接收端

package com.sky.wechat;

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


public class ReceiveTask implements Runnable{

    private int receivePort;
    public ReceiveTask(int receivePort){
        this.receivePort = receivePort;
    }
    @Override
    public void run() {
        DatagramSocket ds = null;
        try {
             ds = new DatagramSocket(receivePort);
            byte[] buf = new byte[1024];
            DatagramPacket dp = new DatagramPacket(buf, buf.length);
            while (true){
                ds.receive(dp); // 接收数据
                String msg = new String(dp.getData(),0, dp.getLength());
                System.out.println("收到:"+dp.getAddress().getHostAddress()+"--发送的数据是:"+msg);
            }
        } catch (SocketException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
          //  ds.close();
        }
    }
}

发送端口和接受端口均在构造方法里初始化,所以接下来我们定义的用户中需要手动输入自己的端口和目标端口来建立连接

这里建立User01和User02两个类

package com.sky.wechat;

import java.util.Scanner;


public class User01 {
    public static void main(String[] args) {
        System.out.println("+++++++++++欢迎使用威信+++++++++++");
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入你的威信号");
        int sendPort = scanner.nextInt();
        System.out.println("请输入要联系的威信号");
        int receivePort = scanner.nextInt();
        System.out.println("威信聊天系统启动");

        //发送数据的操作
        new Thread(new SendTask(sendPort)).start();
        //接受数据的操作
        new Thread(new ReceiveTask(receivePort)).start();

    }
}

用户02 和用户01 的代码段是一摸一样的,这样就实现类基于UDP的网络通信

看效果图

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/933382.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号