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:
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?
Einmal abgesehen davon, dass du niemals Exception Klammern leer läßt (es sei denn du weißt wirklich was du da gerade tust).
} 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.
ups, wie mir scheint hab ich den falschen Code gepostet xD
hier nochmal der Richtige
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 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
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)