Zum Inhalt springen

Timberwolf

Mitglieder
  • Gesamte Inhalte

    15
  • Benutzer seit

  • Letzter Besuch

Alle Inhalte von Timberwolf

  1. So... nach dem ich jetzt mehrere Stunden damit zugebracht habe die verschiedenen Beispiele im Tutorial durch zu kauen bin ich trotzdem leider zu keinem brauchbaren ergebnis gekommen. Ich sehe zwar auf dem Server das da was passiert...also das der Server mich annimmt aber nicht das irgendwas zurück kommt. Bin ja mal ganz ehrlich das ich das mit dem auslesen des ByteBuffers nicht so ganz kapiert habe...und ich denke mal das wenn der rückgabe wert des SocketChannels 0 ist hat der Server den entsprechenden befehl nicht ausgeführt bzw. liefert mir einfach nichts zurück. muss mich korrigieren... hab das eben nochmal getestet und nu bekomm ich einen Intwert von 156 zurück.... wie meinst du das mit dem Thread und der while schleife... beides hab ich nicht in meinem testtool ja nu nicht drin grüße
  2. okay das Tut werde ich mir mal gleich reinziehen und das prüfen werde ich auch noch mit rein nehmen... danke das du es geprüft hast... werde jetzt das alles ausprobieren und dann berichten. Danke & Gruß Timberwolf
  3. hier mal das kleine testtool. System.out.println() gibt mir zweimal 24 Bytes... da hört es dann bei mir jetzt gerade einfach mal auf public class testmain { /** * @param args */ public static void main(String[] args) { String addr = "87.106.32.16"; Integer port = 8080; Integer rconport = 46964; SocketChannel sc = null; Charset std = Charset.forName("utf-8"); try { InetSocketAddress isa = new InetSocketAddress(InetAddress.getByName(addr), 46964); System.out.println(isa); ByteBuffer bb = ByteBuffer.allocate(4096); String msg = "<?xml version=\"1.0\"?>"+ "<methodCall>"+ "<methodName>rcon_command</methodName>"+ "<params><param>"+ "<value><string>sv_status</string></value>"+ "</param></params>"+ "</methodCall>"; sc = SocketChannel.open(); Socket client = sc.socket(); client.connect(isa); System.out.println("connect: "+ client.getRemoteSocketAddress()); DataInputStream is = new DataInputStream(client.getInputStream()); DataOutputStream os = new DataOutputStream(client.getOutputStream()); while(is.readByte() != 0){ System.out.println(is.readByte()); } for (int n=0; n<20; n++){ bb = std.encode(CharBuffer.wrap(msg)); sc.write(bb); if(bb == null){ System.out.println("Buffer ist leer"); } System.out.println(std.decode(bb)); bb.rewind(); } client.close(); System.out.println("nach dem close"); } catch (UnknownHostException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } das ist alles was ich hab durchlaufen lassen. Wenn Ihr eine bessere Testlösung oder noch ne idee habt wie ich rausbekomme was mir da übergeben wird schiesst einfach los werde selber noch weiter testen und schauen das ich das irgendwie gelöst bekomme.... danke schonmal für eure Hilfe. grüsse Timberwolf
  4. Das mit der synchronen verbindung hatte ich auch schon versucht. da lief es aber genauso. Ich werde mir gleich mal das kleine testtool schreiben und schauen was dabei rauskommt. Wenn ich die Daten an den Port 8080 schicke auf dem der Http Server(CryHttp) läuft bekomme ich mit XML/RPC ein BadRequest.... wenn ich es aber mit einem XML - Debugger an den Rcon port schicke gibt es nur nen Url fehler(http://xxxIPxxx) werde dann gleich mal berichten wie es lief....
  5. rein theoretisch ja... ich habe das kleine problem das ich den Inputstream vom Socket nicht gelesen komme... nicht weil ich nciht weis wie sindern weil das tool aus mir unerfindlichen gründen einfriert... und das genau in dem augenblick wo ich versuche den InputStream zu lesen. Der Server stellt eine XML/PRC Schnittstelle zur verfügung die ich nicht richtig bedient bekomme. daher vermute ich das ich da einen fehler mache... so sieht der XML - Code aus den ich da rüber schicke.. <?xml version="1.0" encoding="UTF-8"?> <methodCall> <methodName>rcon_connect</methodName> <params><param> <value><string>addr:xxxxx</string></value> </param> <param> <value><string>port:46964</string></value> </param> <param> <value><string>pass:xxxx</string></value> </param> <param> <value><string>connection_distributed 0</string></value> </param> </params> </methodCall> wenn ich heute abend dazu komme dann poste ich hier den Code den Ihr braucht um das einmal komplett nach zu arbeiten...
  6. public classConnection ist der Kontruktor. Was client / Server verbindungen angeht bin ich nicht ganz unbewandert. Das problem was ich habe ist das ich nicht bestätigen kann das der Server den jeweiligen Befehl erhalten und auch ausgeführt hat, da ich nicht verifizieren kann das ich was vom Server zurück bekomme. Es wird bestätigt das ich mit dem Server verbunden bin. mehr aber auch leider nicht. die Klasse wird von einem JInternalFrame aufgerufen das die Daten die hier zurück kommen benötigt um diese darzustellen.
  7. Moin Moin, ich habe ein kleines Problem mit der entiwcklung einer asynchronen Socketverbindung. Hier erstmal die Grundlage dessen was ich damit vorhabe: Ziel ist es eine Klasse zu schreiben die x Verbindungen zu x verschiendenen Server aufrecht erhält. Bei dem Server handelt es sich um einen Crysis Dedicated Game Server. Dieser verfügt über einen eigenen kleinen HTTP - Server. Das problem an der ganzen sache ist aber das ich mir nicht sicher bin ob die daten die ich im gebe auch beim Server ankommen. Eine Verbindung bekomme ich ohne weiteres nur der rest funktioniert anscheindent nicht. hier seht ihr meine classConnection public classConnection(String serverip, Integer serverport, String pwd){ adr = serverip; p = serverport; pass = pwd; run(); } public void run(){ System.out.println("vor dem eigentlichen run"); SocketChannel sc = null; Charset std = Charset.forName("utf-8"); try { InetSocketAddress isa = new InetSocketAddress(InetAddress.getByName(adr), p); ByteBuffer bb = ByteBuffer.allocate(4096); sc = SocketChannel.open(); Socket client = sc.socket(); client.connect(isa,p); System.out.println("connect: "+ client.getRemoteSocketAddress()); Integer result = sc.write(std.encode("<?xml version=\"1.0\" encoding=\"UTF-8\"?><methodCall><methodName>g_revivetime 10</methodName><params/></methodCall>")); System.out.println("write 1:" +result); if(sc.read(bb) != -1){ System.out.println("if"); bb.flip(); String str = std.decode(bb).toString(); System.out.println(str); } client.close(); System.out.println("nach dem close"); } catch (UnknownHostException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } Ich würde mich freuen wenn jemand von euch ne idee hat wie man das besser gestallten kann oder ob ich da irgendwo nen Fehler eingebaut habe und ihn aufgrund von Codeblindheit einfach nicht sehe. Danke für die Hilfe und Gruß Timberwolf PS: wenn weitere Infos benötigt werden ist das kein Problem
  8. hat hier kein Mensch ne Antwort???
  9. Moin Moin, ich hab da ein klitze kleines Problem wo ich absolut nicht weiter komme... vielleicht kann mir ja jemand von euch helfen. Ich bastel gerade an ner CRM Desktop Anwendung mit Client Server Betrieb rum und nu hab ich meinen Server auf SSL umgestellt.... den Client natürlich auch und beide haben auch alles mit Zertifikat und so da.... Das problem an der ganzen sache stellt sich nun wie folgt da: Server bekommt wenn Client gestartet wird und ersten Abfragebefehl schickt nen Invalid Stream Header und zwar genau hier: private SSLSocket socket_client; private ObjectInputStream input_stream; private ObjectOutputStream output_stream; // Input und Output Stream der Verbindung beziehen (senden / // empfangen) try { input_stream = new ObjectInputStream(socket_client.getInputStream()); } catch (IOException e2) { // TODO Auto-generated catch block e2.printStackTrace(); } //while(t != null){ try { output_stream = new ObjectOutputStream(socket_client.getOutputStream()); } catch (IOException e2) { // TODO Auto-generated catch block e2.printStackTrace(); } der client sach gar nichts und bricht vollkommen wech... leider... der Server soll in der ersten Anweisung nur ein Count auf die DB zurück liefern mehr nicht... der rest geschieht dann bis auf die Login abfrage bei Client. Wenn Ihr mehr Code braucht sacht einfach bescheid... dann poste ich noch ein wenig mehr aus der con datei... wie gesagt SSL heute eingebaut.... public void server_start() throws IOException{ SSLSocket clientsslsocket = null; SSLServerSocketFactory sslserversocketfactory =(SSLServerSocketFactory) SSLServerSocketFactory.getDefault(); SSLServerSocket sslserversocket = (SSLServerSocket) sslserversocketfactory.createServerSocket(1555,50); runstatus = true; connections = new ArrayList<class_connection>(); while(runstatus){ try { clientsslsocket = (SSLSocket) sslserversocket.accept(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } finally { //if ( client != null ) //try { client.close(); } catch ( IOException e ) { e.printStackTrace(); } } connection_handler(clientsslsocket); } } und seit dem macht er nur noch Invalid Stream Header
  10. Danke für die Hilfe. Hat alles geklappt und funktioniert jetzt auch alles so wie es soll... kann hier also geschlossen werden.
  11. Moin flashpixx danke für den Tip mit der while.... bin gerade dabei mal zu schauen ob das jetzt alles so klappt wie ich mir das vorstelle.... Thread sleep hab ich auch schon vorher mal auspobiert muss aber nochmal schau:D wie ich das einbaue....
  12. Hallo, ich habe folgendes Problem. Ich habe einen Client und einen Server geschrieben. Beide funktionieren auch ohne probleme. Der Server akzeptiert Verbindung vom Client ohne zu meckern und lässt auch einen LogIn zu.... erst wenn ich versuche fogende Methode auszuführen frisst sich irgendwie der Client fest public ArrayList<ArrayList<String>> get_contacts(){ ArrayList<ArrayList<String>> srv_msg = null; verb_protokoll = null; verb_protokoll = new protokoll(); verb_protokoll.command = 2; System.out.println(verb_protokoll.command); //verb_protokoll.data = new ArrayList<ArrayList<String>>(); srv_msg = connect.send_receive(verb_protokoll); System.out.println(srv_msg); return srv_msg; } hier noch das sehr einfache verbindungsprotokoll public class protokoll implements Serializable{ /** * */ private static final long serialVersionUID = -1560951462415302366L; public Integer command; public ArrayList<ArrayList<String>> data; } das hier ist die class_Connection die auf dem Server läuft an der keine Nachricht ankommt. public class class_connection extends Thread { private Socket socket_client; private ObjectInputStream input_stream; private ObjectOutputStream output_stream; private class_database db; public class_connection(Socket client) { socket_client = client; } // Starten des Threads(prozess starten) public void run() { db = new class_database(); db.conn_db(); class_user usr = new class_user(db); System.out.println("con startet"); // Input und Output Stream der Verbindung beziehen (senden / // empfangen) try { input_stream = new ObjectInputStream(socket_client.getInputStream()); } catch (IOException e2) { // TODO Auto-generated catch block e2.printStackTrace(); } System.out.println("hier input waiting"); try { output_stream = new ObjectOutputStream(socket_client.getOutputStream()); } catch (IOException e2) { // TODO Auto-generated catch block e2.printStackTrace(); } protokoll protokoll = new protokoll(); System.out.println("warte auf Nachricht"); try { protokoll = (protokoll) input_stream.readObject(); } catch (IOException e2) { // TODO Auto-generated catch block e2.printStackTrace(); } catch (ClassNotFoundException e2) { // TODO Auto-generated catch block e2.printStackTrace(); } System.out.println(protokoll.command); switch (protokoll.command) { case 1: System.out.println("login"); String usr_name = protokoll.data.get(0).get(0).toString(); String password = protokoll.data.get(0).get(1).toString(); try { if (usr.login(usr_name, password)) { protokoll = new protokoll(); ArrayList<String> status = new ArrayList<String>(); status.add("success"); System.out.println(status); protokoll.data = new ArrayList<ArrayList<String>>(); protokoll.data.add(status); output_stream.writeObject(protokoll); output_stream.flush(); } } catch (IOException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } catch (Exception e1) { // TODO Auto-generated catch block e1.printStackTrace(); } break; case 2: System.out.println("get_contacts"); break; case 3: System.out.println("search"); break; default: protokoll = new protokoll(); ArrayList<String> status = new ArrayList<String>(); status.add("false"); System.out.println(status); protokoll.data = new ArrayList<ArrayList<String>>(); protokoll.data.add(status); try { output_stream.writeObject(protokoll); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } try { output_stream.flush(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } ich bin mittlerweile echt am verzweifeln weil ich den Fehler bzw. meinen evtl. denkfehler einfach nicht sehe. ich würde mich über hilfe freuen.... wenn weiterer code oder mehr informationen nötig sind soll das alles nicht das Problem darstellen Danke & Gruss Timberwolf
  13. Okay ich danke für die Hilfe... hab das Problem gelöst.... @flashpixx: danke für die Hilfe und inspiration...
  14. okay.... und wenn ich das dann mal richtig verstehe kann ich bei dem la.add noch meine ganzen anderen Spalten hinzufügen oder?! danke werde das mal eben ausprobieren... oaky die ausgabe hatte ich so ähnlich auch schon....aber danke schonmal hab vergessen zu sagen das ich alles was ich es aus der DB habe in ein JTable einfügen muss... von daher kam mir halt die Idee mit dem Array... hab mit der Arraylist noch nicht soviele erfahrungen... kann ich auf die auch wie auf ein Array zugreifen ??? gruss
  15. Hallo, ich habe da ein kleines Problem mit einem Array meinem SQL Ergebnis. Es geht darum das ich aus einer Tabelle Termine(titel,orte,datum_von, datum_bis etc.) auslesen und diese Daten in ein Multidimensionales Array packen will. Ich habe es mittlerweile mit einer while und for schleife versucht aber es will mir nicht gelingen... kann mir einer nen Tip geben wie man sowas am besten macht??? hier ein kleiner Auszug aus dem Code String SQL_termine = "SELECT * FROM termine"; this.stmt = this.con.createStatement(); this.res_set = this.stmt.executeQuery(SQL_termine); resultSetMetaData = this.res_set.getMetaData(); columnCount = resultSetMetaData.getColumnCount(); while(this.res_set.next()) for(int j = 0;j <= 3;j++){ termine = new String[1][columnCount]; //while (this.res_set.next()) { termine[0][j] = this.res_set.getString("titel"); System.out.println(termine[0][j]); } es ist wahrscheinlich mal wieder eine kleinigkeit die mir nicht auffällt oder die ich nicht sehe... Danke schonmal für die Hilfe.... gruss Timberwolf

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...