Problem mit Datagram-Sockets

php.freak

Mitglied
Hallo,

ich habe mich gerade mal an etwas Netzwerkprogrammierung versucht und komme bei folgendem Problem einfach nicht weiter:

Java:
if(!s.isEmpty()) {
          byte[] raw = s.getBytes();
          DatagramPacket packet = new DatagramPacket(raw, raw.length, host, (Integer.getInteger(ServerPort)+1));
          DatagramSocket socket = new DatagramSocket();
          socket.send(packet);
      }

gibt eine java.lang.NullPointerException in der 3. Zeile.


Außerdem gibt an einer anderen Stelle

Java:
DatagramSocket host = new DatagramSocket(Integer.getInteger(ServerPort)+1);

den gleichen Fehler aus.

Die Variable ServerPort, ist ein String, der aus einer txt-Konfigurationsdatei gelesen wird. In der gleichen Verwendungsweise funktioniert er weiter oben im Programm, aber schon hervorragend mit Streaming-Sockets (nur eben ServerPort, statt ServerPort+1).

Hat jemand eine Idee, wo das Problem liegt und wie ich es beheben kann?

Vielen Dank für eure Antworten schonmal im Voraus!
 

Kr0e

Gesperrter Benutzer
Falls du noch ein Snippet oder so für UDP brauchst, musste das hier neulihc machen, vlt. hilfts dir ja bei weiteren Fragen...

Java:
package com.indyforge.twod.engine.io.network.udp.broadcast;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.DataInputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.InetSocketAddress;
import java.net.SocketAddress;
import java.nio.ByteBuffer;

/**
 * Simple broadcaster class. Basically you initialize this class with a given
 * address and then all requests on this address are answered with your message.
 * 
 * 
 * TODO: Doc.
 * 
 * @author Christopher Probst
 */
public final class Broadcaster extends Thread {

	/**
	 * Protocol constant for sending the message.
	 */
	public static final short SEND_ME_YOUR_MESSAGE = 1337;

	/**
	 * This is maximum size. UDP should handle 65536 but due to router
	 * fragmentation the half is more safe.
	 */
	public static final int MAX_MESSAGE_SIZE = 32768;

	/**
	 * Even this value is quite huge. Its a default value.
	 */
	public static final int MAX_READ_SIZE = 128;

	public static Object receiveMessageFrom(int port, int timeoutmillies)
			throws IOException, ClassNotFoundException {
		return receiveMessageFrom(
				new InetSocketAddress(InetAddress.getByName("255.255.255.255"),
						port), timeoutmillies);
	}

	/**
	 * This method is the client which sends and receives packets.
	 * 
	 * @param target
	 * @return
	 * @throws IOException
	 * @throws ClassNotFoundException
	 */
	public static Object receiveMessageFrom(SocketAddress target,
			int timeoutmillies) throws IOException, ClassNotFoundException {

		// Just open, does not matter which port
		DatagramSocket receiver = new DatagramSocket();

		// Use timeout
		receiver.setSoTimeout(timeoutmillies);

		// Build request
		ByteBuffer buffer = ByteBuffer.allocate(2);
		buffer.putShort(SEND_ME_YOUR_MESSAGE);
		byte[] request = buffer.array();

		// Create packet
		DatagramPacket packet = new DatagramPacket(request, request.length,
				target);

		// Send the request
		receiver.send(packet);

		// Assume max size...
		byte[] response = new byte[MAX_MESSAGE_SIZE];

		// Define answer
		DatagramPacket answer = new DatagramPacket(response, response.length);

		// Try to read answer
		receiver.receive(answer);

		// Create a new parser
		ObjectInputStream parser = new ObjectInputStream(
				new ByteArrayInputStream(answer.getData(), answer.getOffset(),
						answer.getLength()));
		try {
			// Read the message and return
			return parser.readObject();
		} finally {
			receiver.close();
			parser.close();
		}
	}

	/*
	 * This is the udp broadcaster.
	 */
	private final DatagramSocket udpServer;

	/*
	 * This message will be broadcasted to all listeners.
	 */
	private final Object message;

	/*
	 * The serialized message and the read buffer.
	 */
	private final byte[] binary, readBuffer;

	public Broadcaster(int port, Object message) throws IOException {
		this(new InetSocketAddress(port), message);
	}

	public Broadcaster(SocketAddress address, Object message)
			throws IOException {
		if (address == null) {
			throw new NullPointerException("address");
		} else if (message == null) {
			throw new NullPointerException("message");
		}

		// Create a new udp socket
		udpServer = new DatagramSocket(address);

		// Save the message
		this.message = message;

		/*
		 * *******************************
		 * 
		 * **** Serialize the message ****
		 * 
		 * *******************************
		 */

		// Used for serializing
		ByteArrayOutputStream output = new ByteArrayOutputStream();

		// Create a new object output on top of the array
		ObjectOutputStream objectOutput = new ObjectOutputStream(output);

		// Write message
		objectOutput.writeObject(message);

		// Flush to output
		objectOutput.flush();

		// Close the stream
		objectOutput.close();

		// Copy and store as final var
		binary = output.toByteArray();

		if (binary.length > MAX_MESSAGE_SIZE) {
			// Well... owned...
			throw new IllegalArgumentException("Your message is "
					+ "too big in binary format.");
		} else {
			// Read should be pretty small...
			readBuffer = new byte[MAX_READ_SIZE];
		}
	}

	public Object getMessage() {
		return message;
	}

	public byte[] getBinary() {
		return binary;
	}

	public DatagramSocket getUdpServer() {
		return udpServer;
	}

	@Override
	public void run() {
		// As long as the thread is not interrupted
		while (!Thread.interrupted()) {

			// Create new read packet
			DatagramPacket packet = new DatagramPacket(readBuffer,
					readBuffer.length);

			try {
				// Try to receive
				udpServer.receive(packet);

				// Log
				System.out.println("Received broadcast request");

				// Create a parser on top of the received packet
				DataInputStream packetParser = new DataInputStream(
						new ByteArrayInputStream(packet.getData(),
								packet.getOffset(), packet.getLength()));

				/*
				 * Was this package meant to be answered by us.
				 */
				if (packetParser.readShort() == SEND_ME_YOUR_MESSAGE) {

					// Create new message packet
					DatagramPacket msgPacket = new DatagramPacket(binary,
							binary.length, packet.getSocketAddress());

					// Now send the packet to its destination
					udpServer.send(msgPacket);
				}
			} catch (IOException e) {
				System.out
						.println("UDP Broadcaster was unable to process IO. Reason: "
								+ e.getMessage());

				// Enough...
				break;
			}

		}

		// Close the socket...
		udpServer.close();
	}
}
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
I Socket Problem mit den WebSocket Antworten der Discord API Netzwerkprogrammierung 0
K Java Websocketserver Problem | Android to Pi Netzwerkprogrammierung 1
C RMI Produzent-Verbraucher-Problem - Code review Netzwerkprogrammierung 12
B Socket Bilder verschicken via Sockets. Heap-Problem. Netzwerkprogrammierung 2
S Problem bei dem Bluetoothverbindungsaufbau Netzwerkprogrammierung 2
G Server-Client IO Problem Netzwerkprogrammierung 6
M Netty - TCP Problem Netzwerkprogrammierung 4
L Socket Problem mit Server Netzwerkprogrammierung 1
J Chat Server starten über GUI problem Netzwerkprogrammierung 4
M Problem bei Socket (MultiplayerSpiel) Netzwerkprogrammierung 4
M Socket CDI, Websocket reference Problem ! Netzwerkprogrammierung 2
Shams Problem mit Eventbus in Verbindung mit Server Netzwerkprogrammierung 0
G apache httpClient Problem. Netzwerkprogrammierung 5
H Problem mit ObjectStreams Netzwerkprogrammierung 3
A Problem beim Senden von Client zu Server Netzwerkprogrammierung 10
D Socket BufferedWriter/Reader Problem Netzwerkprogrammierung 1
Maxim6394 Problem mit Socks5 Implementierung Netzwerkprogrammierung 0
C Handle Connection Problem Netzwerkprogrammierung 3
E HttpUrlConnection Cookie Problem Netzwerkprogrammierung 0
X Problem mit vielen Bytes über Socket Netzwerkprogrammierung 23
O 4Gewinnt Multiplayer - Netzwerk Problem (TCP) Netzwerkprogrammierung 1
A Socket Socket-Problem - Object wird nicht übertragen Netzwerkprogrammierung 3
R Problem beim Programmieren eines Chatprogramms Netzwerkprogrammierung 5
E einfaches Problem: Session-Handling bei Servlets Netzwerkprogrammierung 5
G Problem mit einem FileWatcher Netzwerkprogrammierung 7
T Socket Server starten Thread Problem Netzwerkprogrammierung 12
B Client/Server Connection Problem Netzwerkprogrammierung 2
G Problem mit STATIC-Verständnis Netzwerkprogrammierung 8
S Umstellung AS400 auf Postgre - Problem beim Arbeiten mit Metadaten Netzwerkprogrammierung 2
J Facelets Include Rendered Problem Netzwerkprogrammierung 2
J Socket Problem mit C++/Java Netzwerkprogrammierung 20
G Socket NIO2 Problem mit AsynchronousSocketChannel beim Schließen Netzwerkprogrammierung 3
G Cookie Verwaltungs Problem nach Login auf InetSeite (Wo utma-Cookie?) Netzwerkprogrammierung 18
C Socket Problem mit ObjectInput/OutputSream Netzwerkprogrammierung 7
B Socket Problem mit Netzwerkchat Netzwerkprogrammierung 21
D RMI Problem beim shutdown von verteilter CORBA-Anwendung Netzwerkprogrammierung 6
Maxim6394 ipv6 Problem Netzwerkprogrammierung 2
Maxim6394 Proxyserver Performance Problem Netzwerkprogrammierung 11
M Problem Client - Server Sockets: .ready() wird nie true! Netzwerkprogrammierung 6
C Socket Problem mit ObjectInput/OutputSream Netzwerkprogrammierung 5
B RMI und Problem mit rmic-Tool Netzwerkprogrammierung 3
C FTP storeFileStream Problem Netzwerkprogrammierung 3
N Problem über http eine Datei zu senden Netzwerkprogrammierung 4
D JavaMail - Mailsabrufen Problem (imap) Netzwerkprogrammierung 12
J HTTP Übersetzung yahoo babelfish - Zeichensatz-Problem Netzwerkprogrammierung 6
D Apache CXF, JAX-WS Problem bei Arrays - einfacher Server Netzwerkprogrammierung 2
M Problem beim Datenempfang Netzwerkprogrammierung 2
X Problem mit Server-Client-Kommunikation Netzwerkprogrammierung 14
M Problem mit Socket-Verbindung Netzwerkprogrammierung 2
N NIO Problem beim speziellen Behandeln von einzelnen Benutzern Netzwerkprogrammierung 13
D Thread problem Netzwerkprogrammierung 3
T Servlets JSP: Tomcat Problem Netzwerkprogrammierung 4
K Client - Server Problem Netzwerkprogrammierung 16
T RMI Problem Client-Server Netzwerkprogrammierung 2
P RMI Stub Problem Netzwerkprogrammierung 3
D Socket UDP Übertragungs Problem Netzwerkprogrammierung 7
I HTTP Post aus html in Java einlesen - Problem Netzwerkprogrammierung 2
I HTTP Post aus html in Java einlesen - Problem Netzwerkprogrammierung 6
D Problem mit ObjectInputStreams Netzwerkprogrammierung 10
D Socket Problem mit InputStreamReader Netzwerkprogrammierung 3
N CRC32 CheckSum Problem bei UDP Netzwerkprogrammierung 2
V Java Mail Api - IMAP Problem Netzwerkprogrammierung 6
P RMI Problem Netzwerkprogrammierung 4
I Problem bei Outputstreamerzeugung in anderer Klasse als Socket Netzwerkprogrammierung 5
S Socket Problem mit Objektübertragung Netzwerkprogrammierung 16
Shoox Reader / Writer Problem Netzwerkprogrammierung 2
S Problem mit 2 Serversockets unter Win XP Netzwerkprogrammierung 7
P Socket Problem mit Netzwerkverbindung über TCP Netzwerkprogrammierung 12
M RMI - Connection Problem Netzwerkprogrammierung 7
J Socket Client - Server Problem Netzwerkprogrammierung 4
M Socket Chat-Client-Problem Netzwerkprogrammierung 8
D Client Server Problem, Methode readline() löst SocketException "Connection reset" aus Netzwerkprogrammierung 8
E HTTP Problem beim Auslesen von Websiten Netzwerkprogrammierung 6
T Problem bei Findung der richtigen Architektur Netzwerkprogrammierung 3
AlexSpritze Authentication Problem bei WebServices Netzwerkprogrammierung 4
J Socket Problem -Proxies Netzwerkprogrammierung 2
R HTTP Problem bei Authentifizierung über (Http)UrlConnection Netzwerkprogrammierung 2
F Konzept Problem Netzwerkprogrammierung 12
G NIO Sockets Architektur Problem Netzwerkprogrammierung 2
H Neues NIO problem nachricht an alle clients Netzwerkprogrammierung 3
J Client server problem Netzwerkprogrammierung 3
S Problem bzgl. Sockets / Server-Client-Struktur Netzwerkprogrammierung 3
W RMI Problem Netzwerkprogrammierung 4
M Problem mit Server Netzwerkprogrammierung 5
N Socket Java server c# client problem Netzwerkprogrammierung 7
Y Problem mit ObjectInputStream beim lesen vom Socket Netzwerkprogrammierung 10
R RMI Hibernate Problem Netzwerkprogrammierung 4
Z RMI Problem Netzwerkprogrammierung 11
F RMI problem mit RMI Netzwerkprogrammierung 3
H Object Cast Problem nach Übertragung mit Log4j Netzwerkprogrammierung 5
H Log4j SocketAppender Problem Netzwerkprogrammierung 2
P HTTP Problem beim Download von einer Datei Netzwerkprogrammierung 4
P Problem mit JOscarLib Netzwerkprogrammierung 6
0din SMTP Client - readline problem Netzwerkprogrammierung 4
C komisches Problem / ObjectInputStream erstellt sich nicht Netzwerkprogrammierung 5
W vista / win server 2003 netzlaufwerk problem Netzwerkprogrammierung 4
W Problem mit HTTP-Dateiübertragung Netzwerkprogrammierung 6
E Problem: netbeans 6.5 und webanwendung Netzwerkprogrammierung 6
C Problem mit Übertragung einer Klasse in RMI Netzwerkprogrammierung 10
B UDP Problem Netzwerkprogrammierung 25

Ähnliche Java Themen

Neue Themen


Oben