# Datagram-Sockets für UDP-Kommunikation



## Guest (24. Jan 2008)

*Hi Leute, ich habe da ein Problem.
Ich möchte gerne die eingehenden Daten über den Sockel 10001 über Java zugänglich machen. Ich habe eine Platine die Über RS232 ein Byte/Sekunde an meine COM2LAN-Platine sendet.*

So sieht das Com2Lan-Modul aus:







*Näheres zu Com2Lan auf folgenden Links:
Modul-A:* http://www.hthiele.de/ctcomlan.html (die Platine)
http://www.heise.de/ct/04/13/200/
http://www.heise.de/ct/04/13/links/200.shtml
*Lantronix:* http://www.lantronix.com/device-networking/embedded-device-servers/xport.html
*Demoapplet:* http://www.heise.de/ct/ftp/04/13/200/
Die Com2Lan-Platine ist wiederum über RJ-45 mit meinem PC verbunden.
Folglich will ich über TCP/IP oder UDP/IP die Daten die meinen PC erreichen verarbeiten.
Wie kann man das realisieren?

Ich habe auch schon was dazu in *"Java ist auch ein Insel"* gefunden
http://www.galileocomputing.de/open...17_011.htm#mj57d19e336c7e644103daf20fdca37312
habe damit leider noch nicht viel anfangen könnnen.

*Ich möchte, dass das Byte was jede Sekunde reinkommt in eine Variable gespeichert wird, so dass ich den Inhalt weiter verarbeiten kann.*

Das ganze läuft im Rahmen eines Projektes zur Wassertankfüllstandsmessung.

In dem Byte was reinkommt ist einfach nur eine Zahl zwischen 0-255 codiert, über welche man den Füllstand des Wassertanks errechnen kann.

Vielen Dank im Voraus für eure Hilfe.

rom4o


----------



## Guest (27. Jan 2008)

Kommen deine Infos über TCP oder UDP herein?
Auf welchem Port kommen sie herein?


----------



## Guest (29. Jan 2008)

Hi, *die Frage ist beantwortet*, ein Kumpel der es in Java voll drauf hat,
hats mir programmiert. Doch nicht über UDP, TCP ist sicherer.


```
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.Reader;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;

public class Connector {

	class DataReaderThread extends Thread {

		private Reader breader;
		private boolean interrupt;
		private boolean stopped;

		public DataReaderThread(Reader reader) {
			this.stopped = false;
			this.breader = reader;
			this.interrupt = false;
		}

		public synchronized boolean getStopped() {
			return stopped;
		}

		public void run() {
			try {
				stopped = false;
				while (!breader.ready() && !interrupt) {
					Thread.sleep(300);
				}

				while (!interrupt) {
					System.out.println(breader.read());
					Thread.sleep(50);
				}
				stopped = true;
			} catch (IOException e) {
				e.printStackTrace();
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}

		@Override
		public synchronized void interrupt() {
			interrupt = true;
		}
	}

	private Socket socket;
	private BufferedReader br;
	private boolean isConnected;
	private DataReaderThread drt;

	public Connector() {
		isConnected = false;
	}

	public void connect(String ip, int port) {
		try {
			InetAddress ia = InetAddress.getByName(ip);
			socket = new Socket(ia.getHostAddress(), port);

			br = new BufferedReader(new InputStreamReader(socket
					.getInputStream()));
			isConnected = true;
			System.out.println("Connected to " + ip + ":" + port);
			System.out.println("Waiting for data ...");
		} catch (UnknownHostException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	public void readContinously() {
		if (!isConnected) {
			System.out.println("Connect first!");
			return;
		}

		if (drt != null) {
			drt.interrupt();
		}

		drt = new DataReaderThread(br);
		drt.start();
	}

	public void disconnect() {
		if (!isConnected) {
			System.out.println("Not connected!");
			return;
		}

		drt.interrupt();
		try {
			while (!drt.stopped) {
				Thread.sleep(100);
			}
			socket.close();
		} catch (InterruptedException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	public static void main(String[] args) {
		Connector c = new Connector();
		c.connect("192.168.178.50", 10001);
		c.readContinously();

		try {
			Reader reader = new InputStreamReader(System.in);
			while (true) {
				char input = (char) reader.read();
				if (input == 'q') {
					c.disconnect();
					System.out.println("disconnected!");
					break;
				}
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}
```

Das Programm läuft super.

*Viele Grüsse...

rom4o*


----------

