view src/wifibroadcast/WifiBroadcast.java @ 4:404778ac3f55

worked. Broadcast, Multicast, Multicast channel.
author one
date Sat, 28 Jul 2012 19:33:34 +0900
parents 9c99e2193277
children 95d58cc5bb0b
line wrap: on
line source

package wifibroadcast;

import java.net.NetworkInterface;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.InetSocketAddress;
import java.net.InterfaceAddress;
import java.net.SocketException;
import java.net.UnknownHostException;
import java.nio.ByteBuffer;
import java.util.Enumeration;

public class WifiBroadcast implements WifiReceiver {

	private DatagramSocket s;
	private int port;
	private InetAddress mAddr;

	public WifiBroadcast(int port, SocketType sender) throws IOException {
		this.port = port;

		if (sender == SocketType.Sender) {
			try {
				InetAddress address0 = getBroadcast();
				System.out.println("Found broadcast "+address0);
				mAddr = address0;
				s = new DatagramSocket();
				s.bind(new InetSocketAddress(address0,port+1));
				s.setBroadcast(true);
			} catch (SocketException e) {
			}
		} else {
			// InetAddress address0 = getBroadcast();
			s = new DatagramSocket(port);
			// s.bind(new InetSocketAddress(address0,port));
			s.setReuseAddress(true);
			s.setBroadcast(true);
		}
	}

	public void recieve(ByteBuffer testData, long timeout) throws IOException {
		DatagramPacket packet = new DatagramPacket(testData.array(),testData.capacity());
		s.receive(packet);
		testData.limit(packet.getLength());
		testData.position(0);
		System.out.println("recv "+packet.getLength()+" bytes from "+packet.getAddress());
		return; // one at a time
	}


	public void send(ByteBuffer testData) throws IOException {
		DatagramPacket sendPacket = new DatagramPacket(testData.array(), testData.limit(),mAddr, port);
		s.send(sendPacket);		
		testData.position(testData.limit());
		System.out.println("send");
	}
	
	public InetAddress getBroadcast0() throws UnknownHostException {
		return InetAddress.getByName("192.168.100.66");
	}

	public InetAddress getBroadcast() throws SocketException {
		Enumeration<NetworkInterface> interfaces =
				NetworkInterface.getNetworkInterfaces();
		while (interfaces.hasMoreElements()) {
			NetworkInterface networkInterface = interfaces.nextElement();
			if (networkInterface.isLoopback())
				continue;    // Don't want to broadcast to the loopback interface
			for (InterfaceAddress interfaceAddress :
				networkInterface.getInterfaceAddresses()) {
				InetAddress broadcast = interfaceAddress.getBroadcast();
				if (broadcast == null)
					continue;
				// Use the address
				return broadcast;
			}
		}
		throw new SocketException();
	}


}