局域网利用多播自动建立socket连接实例

客户端

public class MainActivity extends Activity {
    /*发送广播端的socket*/
    private MulticastSocket ms;
    /*发送广播的按钮*/
    private Button sendUDPBrocast;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        init();
    }

    /*初始化参数*/
    public void init() {
        setContentView(R.layout.main);
        sendUDPBrocast = (Button) findViewById(R.id.send);
        sendUDPBrocast.setOnClickListener(new SendUDPBrocastListener());
        try {
            /*创建socket实例*/
            ms = new MulticastSocket();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * 单击按钮时,发送局域网广播
     * */
    class SendUDPBrocastListener implements OnClickListener{

        @Override
        public void onClick(View v) {
            //发送的数据包,局网内的所有地址都可以收到该数据包
            DatagramPacket dataPacket = null;
            try {
                ms.setTimeToLive(4);
                //将本机的IP(这里可以写动态获取的IP)地址放到数据包里,其实server端接收到数据包后也能获取到发包方的IP的
                byte[] data = "192.168.1.101".getBytes();
                //224.0.0.1为广播地址
                InetAddress address = InetAddress.getByName("224.0.0.1");
                //这个地方可以输出判断该地址是不是广播类型的地址
                System.out.println(address.isMulticastAddress());
                dataPacket = new DatagramPacket(data, data.length, address,
                        8003);
                ms.send(dataPacket);
                ms.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
}

服务端

public class MainActivity extends Activity implements Runnable {
    private MulticastSocket ds;
    String multicastHost="224.0.0.1";
    InetAddress receiveAddress;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        try {
            ds = new MulticastSocket(8003);
            receiveAddress=InetAddress.getByName(multicastHost);
            ds.joinGroup(receiveAddress);
            new Thread(this).start();
        } catch (Exception e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }
    }

    @Override
    public void run() {
        // TODO Auto-generated method stub
        byte buf[] = new byte[1024];
        DatagramPacket dp = new DatagramPacket(buf, 1024);
        while (true) {
            try {
                ds.receive(dp);
                //Toast.makeText(this, new String(buf, 0, dp.getLength()), Toast.LENGTH_LONG);
                System.out.println("client ip : "+new String(buf, 0, dp.getLength()));
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
}

猜你喜欢

转载自blog.csdn.net/q1183345443/article/details/81705464