[分布式java]基于JavaAPI实现消息方式的系统间通信:UDP/IP+BIO

来源:互联网 发布:淘宝迪奥正品店 编辑:程序博客网 时间:2024/05/21 10:20
基于JavaAPI实现消息方式的系统间通信: UDP/IP+BIO
 * UDP是一个不可靠无连接协议,数据直接发往接收端后不管是否成功。

 * JavaAPI中,DatagramSocket与连接有关,DatagramPacket与数据承载有关。


实现比较简单,与TCP/IP+BIO类似,接收和发送会产生阻塞,以下为代码实现

public class UdpIpBioJavaMethod {    public static void main(String[] args) {        final UdpIpBioJavaMethod server=new UdpIpBioJavaMethod();        //建立一个接收监听线程        final Thread receive=new Thread() {            @Override            public void run() {                server.receive(1234);            }        };        receive.start();        final Thread send=new Thread() {            @Override            public void run() {                server.send(1234);            }        };        send.start();    }    public void receive(int port){        DatagramSocket serverSocket=null;        try {            //开启一个监听,设置端口,用于连接            serverSocket=new DatagramSocket(port);            byte[] buffer=new byte[65507];            //用于接收数据            DatagramPacket receivePacker=new DatagramPacket(buffer,buffer.length);            serverSocket.setSoTimeout(6000);//设置读取流超时设置            //while(true){//可以设置持续监听            //此处会阻塞,等待接收数据,可以建立多线程处理阻塞            serverSocket.receive(receivePacker);            System.out.println("Client Address:" + receivePacker.getAddress());            System.out.println("Client Port:"+receivePacker.getPort());            System.out.println("Client Data:"+new String(receivePacker.getData()));            //}        } catch (SocketException e) {            e.printStackTrace();        }catch (IOException ie){            ie.printStackTrace();        }finally {            serverSocket.close();        }    }    public void send( int port){        byte[] data="Hello Receiver".getBytes();        DatagramSocket socket= null;        try {        socket = new DatagramSocket();        //用于发送数据,最后两个参数: 1、目标IP。2、目标port        DatagramPacket packet=new DatagramPacket(data,data.length                ,InetAddress.getLocalHost(),port);        socket.send(packet);        } catch (SocketException e) {            e.printStackTrace();        }catch (UnknownHostException ue){            ue.printStackTrace();        }catch (IOException ie){            ie.printStackTrace();        }finally {            socket.close();        }    }}


0 0