Autor Thema: Java Agent für UDP  (Gelesen 5816 mal)

Offline Pir0x

  • Junior Mitglied
  • **
  • Beiträge: 73
Java Agent für UDP
« am: 11.09.08 - 12:33:21 »
Hallo, ich wollte einen Java Agent programmieren basiernd auf UDP, allerdings bin ich mir Java Syntax dafür nicht so sicher, ich hab ein Bespiel gefunden:

Link: http://andreas-rozek.de/Java/JavaKurs/Vortrag/sld155.htm

bei mir sieht das dann folgendermaßen aus:

Code
	try 
			{
			DatagramSocket UDPSocket = new DatagramSocket(int 1024, InetAdress 192.168.72.114);
			DatagramPacket UDPPacket = new DatagramPacket();
			
			UDPPacket.setData(41);
			UDPPacket.setLength(1);
			
			UDPSocket.send(UDPPacket);
			UDPSocket.receive(UDPPacket);
			
			UDPSocket.close();
			
			} catch (SocketException Signal) {
			} catch (IOException Signal) {
			};

meine Frage ist ob das so funktioniert oder muss ich da noch was mit einbauen?

Offline Ralf_M_Petter

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.879
  • Geschlecht: Männlich
  • Jeder ist seines eigenen Glückes Schmied
    • Ralf's Blog
Re: Java Agent für UDP
« Antwort #1 am: 11.09.08 - 13:51:39 »
Den Code halte ich für etwas fragwürdig, da er sich nicht an die Javakonventionen hält, aber prinzipiell halte ich Ihn für richtig, auch wenn du dann mit dem Packet etwas machen sollst.

Grüße

Ralf
Jede Menge Tipps und Tricks zu IT Themen findet Ihr auf meinem Blog  Everything about IT  Eine wahre Schatzkiste sind aber sicher die Beiträge zu meinem Lieblingsthema Tipps und Tricks zu IBM Notes/Domino Schaut doch einfach mal rein.

Offline flaite

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.966
    • mein del.icio.us
Re: Java Agent für UDP
« Antwort #2 am: 11.09.08 - 18:26:33 »
Einmal abgesehen davon, dass du niemals Exception Klammern leer läßt (es sei denn du weißt wirklich was du da gerade tust).
Code

			} catch (SocketException Signal) {
Signal.printStackTrace();
			} catch (IOException Signal) {
Signal.printStackTrace();
			};
Bitte, bitte, bitte. Solange man kein Logging jedwegen flavours verwendet, sollte man zumindest dieses printStackTrace dahintun.

Oder, wenn du keinen Bock auf checked Exception hast, einfach throws Exception oben in die Methode.
Und in der Klasse DatagramPacket gibts keine Methode setData(int). Höchstens setData(byte[] b);

Java eignet sich sehr schlecht für solche Copy und Paste Aktionen von Leuten, die nicht so recht wissen, was sie tun.

Bin ja inzwischen nicht der einzigste, der in den Blog-Kommentar-Diskussionen Groovy zur guten Idee für Notes erklären.
Damit ging das eher als mit Java. 
 
Ich würd eines der zahlreichen Kurz-Tutorials mit Beispiel-Code in Eclipse laden. Das ausprobieren, dann eine in Notes benutzbare Klasse schreiben. In Eclipse mit Junit3.8 die nötigen Integrationstests schreiben, diese ausführen und dann das ganze in einen Notes-Agenten importieren
Vielleicht sollte ich darüber mal bloggen.
« Letzte Änderung: 11.09.08 - 18:28:06 von Axel Janssen »
Ich stimm nicht mit allen überein, aber mit vielen und sowieso unterhaltsam -> https://www.youtube.com/channel/UCr9qCdqXLm2SU0BIs6d_68Q

---

Aquí no se respeta ni la ley de la selva.
(Hier respektiert man nicht einmal das Gesetz des Dschungels)

Nicanor Parra, San Fabian, Región del Bio Bio, República de Chile

Offline Pir0x

  • Junior Mitglied
  • **
  • Beiträge: 73
Re: Java Agent für UDP
« Antwort #3 am: 12.09.08 - 08:51:45 »
ups, wie mir scheint hab ich den falschen Code gepostet xD

hier nochmal der Richtige

Code
import lotus.domino.*;
import java.io.*;
import java.net.*;
import java.net.DatagramSocket;
import java.net.DatagramPacket;
import java.lang.*;
import java.nio.channels.*;

public class JavaAgent extends AgentBase 
{
	static final char stx = '\u0002';
	static final char cr = '\r';
	static final char etx  = '\u0003';
	static final char soh = '\u0001';
	public void NotesMain() 
    {

		try 
         {
			Session session = getSession();
			AgentContext agentContext = session.getAgentContext();
			System.out.println("gestartet");


			
				String segal=stx+"11ETeststring" + cr;
				InetAddress address = InetAddress.getByName("192.168.72.40"); 
				byte[] buf = new byte[256];
				String received;
				DatagramSocket UDPSocket = new DatagramSocket( 1024);
				DatagramPacket UDPPacket = new DatagramPacket(segal.getBytes(), segal.length(), address,1024);
                    UDPSocket.setSoTimeout(2000);
		       
				System.out.println("angelegt"); 
				
				UDPSocket.send(UDPPacket);
				System.out.println("gesendet");

				UDPPacket = new DatagramPacket (buf, buf.length);
				UDPSocket.receive(UDPPacket);
                                System.out.println("empfangent");
				received = new String (UDPPacket.getData(), 0, UDPPacket.getLength());
				System.out.println(received);
				
				System.out.println(UDPPacket.getData());
				UDPSocket.close();
						
			
		} 
		catch(Exception e) 
		{
			e.printStackTrace();
		}
	}
	
}

also das Sende ist garkein Problem, klappt ohne Probs, schwieriger siehts da beim Empfangen aus, bevor nach dem Senden die Daten zurückkommen hat sich mein Notes abgeschossen :/
das Letzte was ich sehe ist die ausgabe durch
Code
System.out.println("gesendet");

jemand nenn Tip was ich damachen kann damit ich das Packet zurückbekomme ohne das Notes abschmiert ?

EDIT: ich hab erstmal nenn SoTimeout mit eingebaut das Notes nicht absturzt, jedoch komm ich nicht über gesendet hinaus

hier mal der Inhalt meiner Java Konsole
Code
gestartet
angelegt
gesendet
java.net.SocketTimeoutException: Receive timed out
	at java.net.PlainDatagramSocketImpl.peekData(Native Method)
	at java.net.DatagramSocket.receive(DatagramSocket.java:674)
	at JavaAgent.NotesMain(JavaAgent.java:39)
	at lotus.domino.AgentBase.runNotes(Unknown Source)
	at lotus.domino.NotesThread.run(Unknown Source)
« Letzte Änderung: 12.09.08 - 09:06:49 von Pir0x »

Offline Ralf_M_Petter

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.879
  • Geschlecht: Männlich
  • Jeder ist seines eigenen Glückes Schmied
    • Ralf's Blog
Re: Java Agent für UDP
« Antwort #4 am: 12.09.08 - 09:44:17 »
Ist doch offensichtlich was passiert, die Gegenstelle schickt das Packet nicht zurück, oder es kommt bei Deinem Rechner nicht an. Übrigens UDP ist ein Protokoll ohne garantierte Übertragung. Das heisst du musst in Deinem Code Vororgetreffen, dass das Paket wiederholt geschickt wird, wenn es verloren geht. Am besten du nimmst um das Problem weiter einzugrenzen mal Wireshark zum überwachen der Kommunikation. Eventuell kommt das Packet gar nicht bei der Endstelle an, oder es geht beim Rückweg verloren. Beides siehst du perfekt mit Wireshark.

Grüße

Ralf
Jede Menge Tipps und Tricks zu IT Themen findet Ihr auf meinem Blog  Everything about IT  Eine wahre Schatzkiste sind aber sicher die Beiträge zu meinem Lieblingsthema Tipps und Tricks zu IBM Notes/Domino Schaut doch einfach mal rein.

Offline Pir0x

  • Junior Mitglied
  • **
  • Beiträge: 73
Re: Java Agent für UDP
« Antwort #5 am: 12.09.08 - 10:21:42 »
danke für das Programm, also es scheint so als ob das Datapacket mit dem

11ETeststring bei der Zieladresse ankommt, allerdings ohne Rückmeldung, woran kann das liegen ?

Offline Ralf_M_Petter

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.879
  • Geschlecht: Männlich
  • Jeder ist seines eigenen Glückes Schmied
    • Ralf's Blog
Re: Java Agent für UDP
« Antwort #6 am: 12.09.08 - 10:35:39 »
Was ist das Ziel für ein Gerät. Das ist doch nicht Notes, da müsstet du dann mit dem hersteller oder Support dieses Geräts Kontakt aufnehmen. Eventuell verwendest du den falschen Port oder du hast einen Fehler in deinen Daten.

Hast du einen anderen Client bei dem die Kommunikation funktioniert, dann am besten mit Wireshark die funktionierende Kommunikation abhören und dann schauen wie sich dein Datenpaket von dem funktionierenden unterscheidet.

Grüße

Ralf
Jede Menge Tipps und Tricks zu IT Themen findet Ihr auf meinem Blog  Everything about IT  Eine wahre Schatzkiste sind aber sicher die Beiträge zu meinem Lieblingsthema Tipps und Tricks zu IBM Notes/Domino Schaut doch einfach mal rein.

Offline Pir0x

  • Junior Mitglied
  • **
  • Beiträge: 73
Re: Java Agent für UDP
« Antwort #7 am: 12.09.08 - 10:56:44 »
ich habs auch schon mit nemm anderen Client probiert, auch hier bekomm ich nix zurück, allerdings bin ich mir beim Port nicht sicher :(

Offline Ralf_M_Petter

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.879
  • Geschlecht: Männlich
  • Jeder ist seines eigenen Glückes Schmied
    • Ralf's Blog
Re: Java Agent für UDP
« Antwort #8 am: 12.09.08 - 11:07:59 »
Mit was willst du überhaupt kommunizieren?
Kannst du mit einem anderen Programm eventuell mit einer mitgelieferten Software mit dem Gerät komunizieren?

Grüße

Ralf
Jede Menge Tipps und Tricks zu IT Themen findet Ihr auf meinem Blog  Everything about IT  Eine wahre Schatzkiste sind aber sicher die Beiträge zu meinem Lieblingsthema Tipps und Tricks zu IBM Notes/Domino Schaut doch einfach mal rein.

Offline flaite

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.966
    • mein del.icio.us
Re: Java Agent für UDP
« Antwort #9 am: 12.09.08 - 11:57:45 »
Ich würd an der Stelle ein Eclipse Projekt erzeugen, den code, der nix mit Domino da reinposten und dann von da aus das ganze versuchen.
Dann siehst du, obs an Domino Agenten liegt oder nicht. Ich kann das so nicht sagen.
Ich stimm nicht mit allen überein, aber mit vielen und sowieso unterhaltsam -> https://www.youtube.com/channel/UCr9qCdqXLm2SU0BIs6d_68Q

---

Aquí no se respeta ni la ley de la selva.
(Hier respektiert man nicht einmal das Gesetz des Dschungels)

Nicanor Parra, San Fabian, Región del Bio Bio, República de Chile

Offline Pir0x

  • Junior Mitglied
  • **
  • Beiträge: 73
Re: Java Agent für UDP
« Antwort #10 am: 12.09.08 - 13:27:19 »
huhu, also hat sich alles geklärt, läuft Problemlos als Java Agent

problem war der Prot


 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz