Broadcast - Suche

MHayer

Grünschnabel
Hallo,

ich habe mehrere Gerät, die ich mit einem UDP Suchen will:
Code:
        byte[] RecieveBuf = new byte [256],SendBuf = Command.getBytes();
        MulticastSocket socket;
        try
        {
            socket = new MulticastSocket();
            socket.setBroadcast(true);
            InetAddress Adr = InetAddress.getByName("255.255.255.255");
            DatagramPacket Recieve = new DatagramPacket (RecieveBuf,RecieveBuf.length);
            DatagramPacket Send = new DatagramPacket(SendBuf, SendBuf.length,Adr,myPort);
            socket.setSoTimeout(wait);
            socket.send(Send);
            do
            {//warten auf Antworten
                socket.receive(Recieve);
                System.out.println(Recieve.getAddress());// Ausgabe der Sende IP
            }while (!socket.isClosed());
            socket.close();
        }
Das Gerät antwortet auf das Kommando direkt auf die Adresse des Broadcasts.
Ein anderes Programm schreibt deshalb in die Sendeadresse ebenfalls den Broadcast "255.255.255.255".
Kann ich die Sendeadresse bei Java ändern?
Habe nichts bei :google:gefunden.
vielen Dank für die Mühe
MHayer
 
Zuletzt bearbeitet:
Also ich versteh dein Problem jetzt nicht so ganz.
Hast du 2 Rechner, die du durch einen Multicastfinden willst? Oder mit Hilfe eines Broadcasts?

Das Gerät antwortet auf das Kommando direkt auf die Adresse des Broadcasts.
Ein anderes Programm schreibt deshalb in die Sendeadresse ebenfalls den Broadcast "255.255.255.255".

Da fehlt eindeutig der Zusammenhang. Bitte deutlich ausdrücken. Und vielleicht klare Beispiele bringen.
Außerdem hast du dem Multicastsockel an keinen Port gebunden. Wie soll er also Pakete empfangen?


Ich gehe davon aus, dass es eine Art Echo-Programm sein soll für UDP. Ich habe deshalb 2 Programme geschrieben, die dir eventuell helfen können. Ein "UDPEchoClient "und ein "UDPEchpServer":

UDPEchoClient:
Java:
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
import java.net.SocketTimeoutException;

public class UDPEchoClient {
	private static final int ECHO_PORT = 1337;

	public static void main(String[] args) {
		DatagramSocket udpSocket = null;
		try {
			udpSocket = new DatagramSocket(ECHO_PORT);
			udpSocket.setBroadcast(true);
			byte[] buffer = new String("Ist da jemand ?").getBytes();
			DatagramPacket packet = new DatagramPacket(buffer, buffer.length, InetAddress.getByName("192.168.0.255"), ECHO_PORT);
			System.out.println("Sende Nachricht.");
			udpSocket.send(packet);

			buffer = new byte[1024];
			packet = new DatagramPacket(buffer, buffer.length);
			udpSocket.setSoTimeout(5000);
			udpSocket.receive(packet);

			System.out.print("Antwort von " + packet.getAddress().getHostAddress() + ":");
			System.out.println(new String(packet.getData(), 0, packet.getLength()));
		} catch (SocketTimeoutException e) {
			e.printStackTrace();
		} catch (SocketException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			udpSocket.close();
		}
	}
}

UDPEchoServer:
Java:
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;

public class UDPEchoServer {
	private static final int ECHO_PORT = 1337;

	public static void main(String[] args) {
		DatagramSocket udpSocket = null;
		try {
			udpSocket = new DatagramSocket(ECHO_PORT);
			udpSocket.setBroadcast(true);
			while (true) {
				byte[] buffer = new byte[1024];
				DatagramPacket packet = new DatagramPacket(buffer, buffer.length);
				udpSocket.receive(packet);
				InetAddress sendeAdresse = packet.getAddress();
				System.out.print("Nachricht von " + sendeAdresse.getHostAddress() + ":");
				System.out.println(new String(packet.getData(), 0, packet.getLength()));
				System.out.println("Sende Antwort.. ");
				String antwort = "Hallo!";
				packet = new DatagramPacket(antwort.getBytes(), antwort.length(), sendeAdresse, ECHO_PORT);
				udpSocket.send(packet);
				System.out.println("Antwort gesendet!");
			}
		} catch (SocketException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			udpSocket.close();
		}
	}
}
 
Zuletzt bearbeitet:

Neue Beiträge

Zurück