view src/wifibroadcast/WifiDatagram.java @ 9:95d58cc5bb0b

instance for test, multiple senders
author one
date Sun, 29 Jul 2012 00:03:29 +0900
parents 248ae478dbe6
children bb2538b7eb8d
line wrap: on
line source

package wifibroadcast;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.InetSocketAddress;
import java.net.SocketException;
import java.net.UnknownHostException;
import java.nio.ByteBuffer;

public class WifiDatagram implements WifiReceiver {

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

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

		if (sender == SocketType.Sender) {
			try {
				InetAddress address0 = getLocalAddress();
				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);
		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 getLocalAddress() throws UnknownHostException {
		return InetAddress.getByName("127.0.0.1");
	}

}