-
Hi Forum
ich muss für ein Programm über udp eine socketconnection erstellen. Das Problem dabei ist, dass ich eine unknown host Exception erhalte.
Wenn ich das ohne udp:// mache, wird mir die Verbindung (vom Server) verweigert, der nur über udp:// erreichbar ist.
Code java:
Kann mir da jemand weiterhelfen?Bei Problemen mit Codes, postet bitte den entsprechenden Codeausschnitt und setzt den in entsprechende Tags.
( [cpp] [/cpp] [css] [/css] [html] [/html] [java] [/java] [javascript] [/javascript] [php] [/php] [sql] [/sql] )
"Funktioniert nicht" ist keine Fehlermeldung. Bitte eine genaue Fehlerbeschreibung und, wenn vorhanden, Fehlermeldungen posten.
RegEx Tutorial
PHP Funktionsreferenz
-
06.07.10 17:35 #2
Um über UDP kommunizieren zu können, benutzt man in Java die DatagrammSockets. Google wird dir dabei sicherlich helfen
Man sagt, das Schwert eines Samurai sei seine Seele ...
Mit den Beiträgen ist es wie mit Schwertern: Je besser die Rohstoffe sind und je öfter man diese bearbeitet, desto hochwertiger sind sie.
Das Schmieden ist eine Kunst; Das Schreiben auch ;)
-
Alles klar Danke, werd ich mir mal anschauen.
Bei Problemen mit Codes, postet bitte den entsprechenden Codeausschnitt und setzt den in entsprechende Tags.
( [cpp] [/cpp] [css] [/css] [html] [/html] [java] [/java] [javascript] [/javascript] [php] [/php] [sql] [/sql] )
"Funktioniert nicht" ist keine Fehlermeldung. Bitte eine genaue Fehlerbeschreibung und, wenn vorhanden, Fehlermeldungen posten.
RegEx Tutorial
PHP Funktionsreferenz
-
06.07.10 17:49 #4
Ich kann auch nen Beispiel posten, wenn du willst, aber es gibt im Inet genug Tutorials, ich denke das sollte also kein Problem sein.
Man sagt, das Schwert eines Samurai sei seine Seele ...
Mit den Beiträgen ist es wie mit Schwertern: Je besser die Rohstoffe sind und je öfter man diese bearbeitet, desto hochwertiger sind sie.
Das Schmieden ist eine Kunst; Das Schreiben auch ;)
-
Hi
ein Beispiel wäre vielleicht gar nicht mal so schlecht. Ich habe es jetzt so versucht und nichts hat funktioniert, siehe Fehlermeldungen:
Code java:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
try{ this.socket = new DatagramSocket(port, InetAddress.getByName(host)); } catch(Exception e){ System.out.println("ErrorRcon: "+e.getMessage()+" "+e.getClass()); //ErrorRcon: udp://IP-Adresse class java.net.UnknownHostException } try{ this.socket = new DatagramSocket(port, InetAddress.getByName(host)); } catch(Exception e){ System.out.println("ErrorRcon: "+e.getMessage()+" "+e.getClass()); //ErrorRcon: Cannot assign requested address: Cannot bind class java.net.BindException } try{ this.socket = new DatagramSocket(port, InetAddress.getByAddress(new byte[]{(byte)1,(byte)2,(byte)3,(byte)4})); } catch(Exception e){ System.out.println("ErrorRcon: "+e.getMessage()+" "+e.getClass()); //ErrorRcon: Cannot assign requested address: Cannot bind class java.net.BindException }
(Der Server ist definitiv online).Bei Problemen mit Codes, postet bitte den entsprechenden Codeausschnitt und setzt den in entsprechende Tags.
( [cpp] [/cpp] [css] [/css] [html] [/html] [java] [/java] [javascript] [/javascript] [php] [/php] [sql] [/sql] )
"Funktioniert nicht" ist keine Fehlermeldung. Bitte eine genaue Fehlerbeschreibung und, wenn vorhanden, Fehlermeldungen posten.
RegEx Tutorial
PHP Funktionsreferenz
-
06.07.10 19:42 #6
Ok, hab da mal was rausgekramt aus alten Tagen, läuft aber noch

UDPTest.java
InputThread.javaCode java:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
package tests.io.net.udp; public class UDPTest { InputThread inTh; OutputThread outTh; public UDPTest() { inTh = new InputThread(); outTh = new OutputThread(); } public static void main(String[] args) { UDPTest udp = new UDPTest(); udp.start(); } public void start() { inTh.start(); outTh.start(); } }
OutputThread.javaCode java:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
package tests.io.net.udp; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.SocketException; public class InputThread extends Thread { private DatagramPacket dp = null; private DatagramSocket ds = null; @Override public void run() { try { ds = new DatagramSocket(6666); } catch(SocketException e) { e.printStackTrace(); } while(!isInterrupted()) { try { Thread.sleep(1000); byte[] data = new byte[1024]; dp = new DatagramPacket(data, data.length); ds.receive(dp); data = dp.getData(); for(int i = 0; i < data.length; i++) { if(data[i] != 0) { System.out.print((char)data[i]); } } System.out.println(); } catch(InterruptedException e) { interrupt(); } catch(java.io.IOException e) { e.printStackTrace(); } } } }
Code java:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
package tests.io.net.udp; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; import java.net.SocketException; import java.net.UnknownHostException; public class OutputThread extends Thread { private DatagramPacket dp = null; private DatagramSocket ds = null; private InetAddress ia = null; @Override public void run() { while(!isInterrupted()) { try { Thread.sleep(1000); ia = InetAddress.getLocalHost(); ds = new DatagramSocket(); byte[] data = ("Zufallszahl: " + Math.random()).getBytes(); dp = new DatagramPacket(data, data.length, ia, 6666); ds.send(dp); } catch(InterruptedException e) { interrupt(); } catch(UnknownHostException e) { e.printStackTrace(); } catch(SocketException e) { e.printStackTrace(); } catch(java.io.IOException e) { e.printStackTrace(); } } } }
Eigentlich nix dolles, es werden einfach nur Packete mit Zufallszahlen geschickt bzw. Text, in dem eine Zufallszahl drin ist und dann eben ausgegeben. War halt damals mein erstes Programm, das UDP-Packete verschicken konnte, einfach nur zum Testen halt (sieht man sicherlich am package
).
Ich glaube die Fehler kommen bei dir durch den Host-Parameter. Wenn ich das richtig verstanden habe, ist er nur für die lokale Bindung da, also an eine lokale IP (vielleicht um die Packete darüber zu schicken, ka). Jedenfalls brauchst du beim Empfangs-Socket nur den Port angeben und beim Sende-Socket halt gar nix, weil die Zielip wird im DatagramPacket angegeben, das versendet wird.Geändert von Akeshihiro (06.07.10 um 19:45 Uhr)
Man sagt, das Schwert eines Samurai sei seine Seele ...
Mit den Beiträgen ist es wie mit Schwertern: Je besser die Rohstoffe sind und je öfter man diese bearbeitet, desto hochwertiger sind sie.
Das Schmieden ist eine Kunst; Das Schreiben auch ;)
-
Hi
ich konnte mir aus deinem Code jetzt die entsprechenden Sachen zusammensuchen, um entsprechende Sachen an den Server zu schicken.
Ich hab jetzt etwa 2 Stunden daran getüftelt wie ich die Antwort des Servers erhalten kann nachdem ich Daten dort hingesendet hab. Das ursprüngliche Problem, was ich hatte, war, dass ich lediglich den Anfang des Outputs erhalten hatte. Ich konnte es lösen in dem ich mehr Bytes gesendet habe wodurch ich dann irgendwie auch mehr Bytes empfangen konnte. Es wäre super wenn mir das nochmal jemand erklären könnte. Hier mal der aktuelle Code:
Code java:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
try{ this.socket = new DatagramSocket(port); this.socket.setSoTimeout(2000); byte[] buffer = new byte[4096]; byte[] input = ("ÿÿÿÿrcon "+this.password+" status\n").getBytes(); for( int i = 0; i < input.length; i++){ buffer[i] = input[i]; } dp = new DatagramPacket(buffer, buffer.length, InetAddress.getByName(host), port); this.socket.send(dp); this.socket.receive(dp); byte[] output = new byte[4096]; output = dp.getData(); //Ausgabe }
Achja, für Verbesserungsvorschläge bin ich natürlich auch offen, das sieht mir im Moment noch eher nach glücklichem Treffer aus als nach gut geschriebenem Code
edit: Schade, leider lese ich doch nicht den ganze output aus sondern nur 1368 bytes. Warum stoppt die Ausgabe dann? Es müssten noch viel mehr Daten folgen. Geschätzt mehr als 3000bytes gesamt.Geändert von timestamp (06.07.10 um 23:30 Uhr)
Bei Problemen mit Codes, postet bitte den entsprechenden Codeausschnitt und setzt den in entsprechende Tags.
( [cpp] [/cpp] [css] [/css] [html] [/html] [java] [/java] [javascript] [/javascript] [php] [/php] [sql] [/sql] )
"Funktioniert nicht" ist keine Fehlermeldung. Bitte eine genaue Fehlerbeschreibung und, wenn vorhanden, Fehlermeldungen posten.
RegEx Tutorial
PHP Funktionsreferenz
-
06.07.10 23:36 #8
Eigentlich haben die Ouputbytes nix mit der Anzahl der Inputbytes zu tun, dein Server ist komisch o.O Und ich würde generell das Empfangen in einen separaten Thread auslagern (oder was heißt würde, ich mach es so), weil soweit ich weiß receive() blockiert, bis etwas ankommt, das heißt der restliche Code kann in der Zeit nicht ausgeführt werden und das Programm könnte sogar freezen (z.B. GUI).
Außerdem weiß ich nix über deinen Server, den du da ansprechen willst, daher kann ich dazu leider auch nix sagen. Aber eigentlich sollte es so funktionieren o.O
EDIT:
Was ist, wenn du das DatagramPacket neu instanzierst, also:
Code java:1 2 3 4
byte[] output = new byte[4096]; dp = new DatagramPacket(output, output.length); socket.receive(dp); output = dp.getData();
Geändert von Akeshihiro (06.07.10 um 23:39 Uhr)
Man sagt, das Schwert eines Samurai sei seine Seele ...
Mit den Beiträgen ist es wie mit Schwertern: Je besser die Rohstoffe sind und je öfter man diese bearbeitet, desto hochwertiger sind sie.
Das Schmieden ist eine Kunst; Das Schreiben auch ;)
-
Hi
das mit dem neuen DatagramPacket war eine super Idee, das funktioniert
Auch die Threadidee ist genial!
Ich habe aber immernoch ein Problem damit, alle Daten zu empfangen. Ein mehrfaches Ausführen der receive Methode ermöglicht mir schonmal im Prinzip alles zu empfangen. Allerdings etwas merkwürdig. Prinzipiell sieht ein Datensatz so aus:
Wenn ich jetzt zuviele IDs habe, muss ich also mehrmals die Methode ausführen. Das führt mich dann zu einem ähnlichen Ergebnis wie hier:ID - Information
Gibt es da einen besseren Weg für? Ich kann mir jetzt natürlich die Daten zusammentackern aber dass sieht mir irgendwie unschön aus.Abfrage 1:
1 - Information
2 - Information
3 - Information
4 - Information
...
13 - Information Anfang
Abfrage 2:
13 - Information Ende
14 - info
15 - info
16 - info
9 - info
10 - info
11 - infoBei Problemen mit Codes, postet bitte den entsprechenden Codeausschnitt und setzt den in entsprechende Tags.
( [cpp] [/cpp] [css] [/css] [html] [/html] [java] [/java] [javascript] [/javascript] [php] [/php] [sql] [/sql] )
"Funktioniert nicht" ist keine Fehlermeldung. Bitte eine genaue Fehlerbeschreibung und, wenn vorhanden, Fehlermeldungen posten.
RegEx Tutorial
PHP Funktionsreferenz
-
07.07.10 08:26 #10
Haben denn die Antworten etwas mit der Größe des output-Arrays zu tun? Also hast du schonmal versucht es noch größer zu machen? Vielleicht sind die Packete einfach größer. Eine andere Erklärung wäre, dass der Server nur eine bestimmte Packet-Größe verschicken kann und das deswegen splittet, dann musst du die Informationen eben zusammentackern.
Man sagt, das Schwert eines Samurai sei seine Seele ...
Mit den Beiträgen ist es wie mit Schwertern: Je besser die Rohstoffe sind und je öfter man diese bearbeitet, desto hochwertiger sind sie.
Das Schmieden ist eine Kunst; Das Schreiben auch ;)
-
möchtest du jeweils einen Datensatz der Form ID-Information als ein Packet oder soll alles gesammt ein Packet sein?
-
Hi
Das output Array ist mehr als groß genug (ich hab es mit 4kb und 8kb probiert). Optimal wäre es alle Datensätze in einem Paket zu bekommen. Alternativ ginge auch ein Paket pro ID, wobei hier die Länge nicht konstant ist, was das Auslesen dann glaub ich etwas schwieriger macht. Die Vermutung, dass der Server nur eine bestimmte Menge Daten verschicken kann würde ich mal mit nein beantworten. Sonst würde ich, meiner Meinung nach, immer gleich viele Daten erhalten. Jedoch erhalte ich einmal z.B 1368 Bytes oder auch nur 1313 Bytes. Also doch ein Unterschied.Bei Problemen mit Codes, postet bitte den entsprechenden Codeausschnitt und setzt den in entsprechende Tags.
( [cpp] [/cpp] [css] [/css] [html] [/html] [java] [/java] [javascript] [/javascript] [php] [/php] [sql] [/sql] )
"Funktioniert nicht" ist keine Fehlermeldung. Bitte eine genaue Fehlerbeschreibung und, wenn vorhanden, Fehlermeldungen posten.
RegEx Tutorial
PHP Funktionsreferenz
-
07.07.10 12:49 #13
Hmm ok, dann haste meine Theorie über den Haufen geworfen xD Aber sonst fällt mir gerade auch nix ein -.-
Man sagt, das Schwert eines Samurai sei seine Seele ...
Mit den Beiträgen ist es wie mit Schwertern: Je besser die Rohstoffe sind und je öfter man diese bearbeitet, desto hochwertiger sind sie.
Das Schmieden ist eine Kunst; Das Schreiben auch ;)
-
Möglicherweise ist die Fragmentierung durch die Netzwerkübertragung bedingt. Ich hab in meinen Projekten immer Steuertext mitgesendet, z.B.:
Code :1 2 3 4
IDSTART 2 12 - Text1 13 - Text2 IDEND
nach Start einfach die Anzahl angeben dann weißt du wielange du lesen musst. Dann kannst du dir nacher einfach den Inhalt zwischen Start und End zusammenhängen
-
Hi
wenn dass so einfach wäre, würde es kein Problem darstellen
Ich kann allerdings keinen Einfluss auf Formatierung nehmen, erst wenn ich die Daten schon erhalten habe 
Naja, ich muss dann wohl oder übel alles zusammen schustern. Immerhin steht pro Zeile nur eine Information, mit String.split("\n") funktioniert es also.
Danke für Eure Hilfe
Bei Problemen mit Codes, postet bitte den entsprechenden Codeausschnitt und setzt den in entsprechende Tags.
( [cpp] [/cpp] [css] [/css] [html] [/html] [java] [/java] [javascript] [/javascript] [php] [/php] [sql] [/sql] )
"Funktioniert nicht" ist keine Fehlermeldung. Bitte eine genaue Fehlerbeschreibung und, wenn vorhanden, Fehlermeldungen posten.
RegEx Tutorial
PHP Funktionsreferenz
Ähnliche Themen
-
'Socket Error #10038 Socket operation on non-socket'
Von jupp2oo8 im Forum C/C++Antworten: 2Letzter Beitrag: 30.01.08, 10:24 -
'Socket Error #10038 Socket operation on non-socket'
Von jupp2oo8 im Forum C/C++Antworten: 2Letzter Beitrag: 29.01.08, 14:59 -
Problem mit Socket
Von JavaJoe im Forum Enterprise Java (JEE, J2EE, Spring & Co.)Antworten: 1Letzter Beitrag: 30.06.07, 22:07 -
Socket problem
Von mrno im Forum JavaAntworten: 1Letzter Beitrag: 15.07.06, 13:59 -
Socket Problem
Von 2fast4you87 im Forum C/C++Antworten: 3Letzter Beitrag: 30.09.05, 16:49



2Danke

Zitieren
Login





