⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 udptransport.java

📁 JGRoups源码
💻 JAVA
字号:
package org.jgroups.tests.perf.transports;import org.jgroups.stack.IpAddress;import org.jgroups.tests.perf.Receiver;import org.jgroups.tests.perf.Transport;import java.io.IOException;import java.net.DatagramPacket;import java.net.DatagramSocket;import java.net.InetAddress;import java.net.MulticastSocket;import java.util.Properties;import java.util.Map;/** * @author Bela Ban Jan 22 * @author 2004 * @version $Id: UdpTransport.java,v 1.6 2005/07/26 11:50:21 belaban Exp $ */public class UdpTransport implements Transport {    Receiver         receiver=null;    Properties       config=null;    InetAddress      mcast_addr=null;    int              mcast_port=7500;    InetAddress      bind_addr=null;    MulticastSocket  mcast_sock=null;    DatagramSocket   ucast_sock=null;    IpAddress        local_addr=null;    ReceiverThread   mcast_receiver=null;    ReceiverThread   ucast_receiver=null;    int              max_receiver_buffer_size=500000;    int              max_send_buffer_size=500000;    public UdpTransport() {    }    public Object getLocalAddress() {        return local_addr;    }    public void create(Properties properties) throws Exception {        this.config=properties;        String mcast_addr_str=System.getProperty("udp.mcast_addr", config.getProperty("mcast_addr"));        if(mcast_addr_str == null)            mcast_addr_str="228.8.8.8";        mcast_addr=InetAddress.getByName(mcast_addr_str);        String bind_addr_str=System.getProperty("udp.bind_addr", config.getProperty("bind_addr"));        if(bind_addr_str != null) {            bind_addr=InetAddress.getByName(bind_addr_str);        }        else            bind_addr=InetAddress.getLocalHost();        ucast_sock=new DatagramSocket(0, bind_addr);        ucast_sock.setReceiveBufferSize(max_receiver_buffer_size);        ucast_sock.setSendBufferSize(max_send_buffer_size);        mcast_sock=new MulticastSocket(mcast_port);        mcast_sock.setReceiveBufferSize(max_receiver_buffer_size);        mcast_sock.setSendBufferSize(max_send_buffer_size);        if(bind_addr != null)            mcast_sock.setInterface(bind_addr);        mcast_sock.joinGroup(mcast_addr);        local_addr=new IpAddress(ucast_sock.getLocalAddress(), ucast_sock.getLocalPort());        System.out.println("-- local_addr is " + local_addr);    }    public void start() throws Exception {        mcast_receiver=new ReceiverThread(mcast_sock);        ucast_receiver=new ReceiverThread(ucast_sock);        mcast_receiver.start();        ucast_receiver.start();    }    public void stop() {        if(mcast_receiver != null)            mcast_receiver.stop();        if(ucast_receiver != null)            ucast_receiver.stop();    }    public void destroy() {        if(mcast_sock != null)            mcast_sock.close();        if(ucast_sock != null)            ucast_sock.close();    }    public void setReceiver(Receiver r) {        this.receiver=r;    }    public Map dumpStats() {        return null;    }    public void send(Object destination, byte[] payload) throws Exception {        DatagramPacket p;        if(destination == null) {            p=new DatagramPacket(payload, payload.length, mcast_addr, mcast_port);        }        else {            IpAddress addr=(IpAddress)destination;            p=new DatagramPacket(payload, payload.length, addr.getIpAddress(), addr.getPort());        }        ucast_sock.send(p);    }    class ReceiverThread implements Runnable {        DatagramSocket sock;        Thread         t=null;        ReceiverThread(DatagramSocket sock) {            this.sock=sock;        }        void start() throws Exception {            t=new Thread(this, "ReceiverThread for " + sock.getLocalAddress() + ':' + sock.getLocalPort());            t.start();        }        void stop() {            t=null;            if(sock != null)                sock.close();        }        public void run() {            byte[]         buf=new byte[128000];            DatagramPacket p;            while(t != null) {                p=new DatagramPacket(buf, buf.length);                try {                    sock.receive(p);                    if(receiver != null) {                        IpAddress addr=new IpAddress(p.getAddress(), p.getPort());                        receiver.receive(addr, p.getData());                    }                }                catch(IOException e) {                    if(sock == null)                        t=null;                }            }            t=null;        }    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -