kostenloser Webspace werbefrei: lima-city


Die spinnen, die Sockets

lima-cityForumProgrammiersprachenJava

  1. Autor dieses Themas

    tion

    Kostenloser Webspace von tion

    tion hat kostenlosen Webspace.

    Hey,

    arbeite mich schon etwas länger in Java ein und bekam gerade folgende Exception um den Kopf gewurfen:

    Connection refused: connect


    Das das heißt, dass der nicht auf den Server verbinden kann, weiß ich :D
    Allerdings läuft der Server 100%ig ( ist ein SA:MP Server ).
    Der try / catch - Blog:

    try
    			{
    				JLSpacer2.setText("Auflösen der Serverinfos");
    				String serverip = JTIP.getText();
    				int serverport = Integer.valueOf(JTPort.getText()).intValue();
    				SendDebug("Serverip: "+ serverip +", Serverport: "+ serverport);
    				JLSpacer2.setText("Verbinden zum Server");
    				Socket socketconnection = new Socket(serverip, serverport);
    				JLSpacer2.setText("Befehl senden");
    				write(socketconnection, packet);
    				JLSpacer1.setText("Befehl gesendet:");
    				JLSpacer2.setText(JTText.getText());
    			}
    			catch(Exception e)
    			{
    				JLSpacer1.setText("Fehler:");
    				JLSpacer2.setText("Siehe Konsole");
    				SendDebug("Ein Fehler trat auf:");
    				System.out.println("Error: "+ e.getMessage());
    			}


    Der Debugtext:

    Debug: Serverip: 127.0.0.1, Serverport: 7777
      Debug: Ein Fehler trat auf:
    Error: Connection refused: reconnect


    Ich hoffe ihr könnt mir helfen, jeder kleine Tipp würde mich voran bringen...
    Beim compilen gibt es keinen Error und ( scheinbar ) auch keinen Warning...

    Tion
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. Lass dir mal die StackTrace der Exception ausgeben, damit du herausfinden kannst, in welcher Zeile der Fehler auftritt. Eventuell sagt dir das dann auch schon, was der Fehler ist. Ansonsten hilft es hier im Forum besser beim Fehlersuchen.

    mfg
  4. Autor dieses Themas

    tion

    Kostenloser Webspace von tion

    tion hat kostenlosen Webspace.

    :O gibt es in Java auch Pipes ?
    Quasi
    chroot -R server /home/server > log.txt

    Das sind ein paar Zeilen, die ich abtippen müsste... Vielleicht 20 ? :D

    Tion
  5. tion schrieb:
    gibt es in Java auch Pipes ?


    naja, du kannst einfach die Ausgabe des Java-Programms (wie die Ausgabe jedes anderen Programms) pipen.

    mfg
  6. Autor dieses Themas

    tion

    Kostenloser Webspace von tion

    tion hat kostenlosen Webspace.

    :S hätte ich eigentlich machen können...
    Habe jetzt eine extra Funktion ReportException geschrieben und die Exception geparst usw.
    Heraus kam:

    java.net.ConnectException: Connection refused: connect
    	at java.net.DualStackPlainSocketImpl.connect0(Native Method)
    	at java.net.DualStackPlainSocketImpl.socketConnect(Unknown Source)
    	at java.net.AbstractPlainSocketImpl.doConnect(Unknown Source)
    	at java.net.AbstractPlainSocketImpl.connectToAddress(Unknown Source)
    	at java.net.AbstractPlainSocketImpl.connect(Unknown Source)
    	at java.net.PlainSocketImpl.connect(Unknown Source)
    	at java.net.SocksSocketImpl.connect(Unknown Source)
    	at java.net.Socket.connect(Unknown Source)
    	at java.net.Socket.connect(Unknown Source)
    	at java.net.Socket.<init>(Unknown Source)
    	at java.net.Socket.<init>(Unknown Source)
    	at SampServerTest.OnButtonGetClicked(SampServerTest.java:92)
    	at SampServerTest$1.actionPerformed(SampServerTest.java:61)
    	at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
    	at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
    	at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
    	at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
    	at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
    	at java.awt.Component.processMouseEvent(Unknown Source)
    	at javax.swing.JComponent.processMouseEvent(Unknown Source)
    	at java.awt.Component.processEvent(Unknown Source)
    	at java.awt.Container.processEvent(Unknown Source)
    	at java.awt.Component.dispatchEventImpl(Unknown Source)
    	at java.awt.Container.dispatchEventImpl(Unknown Source)
    	at java.awt.Component.dispatchEvent(Unknown Source)
    	at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
    	at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
    	at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
    	at java.awt.Container.dispatchEventImpl(Unknown Source)
    	at java.awt.Window.dispatchEventImpl(Unknown Source)
    	at java.awt.Component.dispatchEvent(Unknown Source)
    	at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
    	at java.awt.EventQueue.access$000(Unknown Source)
    	at java.awt.EventQueue$3.run(Unknown Source)
    	at java.awt.EventQueue$3.run(Unknown Source)
    	at java.security.AccessController.doPrivileged(Native Method)
    	at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
    	at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
    	at java.awt.EventQueue$4.run(Unknown Source)
    	at java.awt.EventQueue$4.run(Unknown Source)
    	at java.security.AccessController.doPrivileged(Native Method)
    	at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
    	at java.awt.EventQueue.dispatchEvent(Unknown Source)
    	at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
    	at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
    	at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
    	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    	at java.awt.EventDispatchThread.run(Unknown Source)
    
    Connection refused: connect


    /Edit: Zeile 92 in SampServerTest:
    Socket socketconnection = new Socket(serverip, serverport);

    Ich weiß 100%ig, dass der Server läuft -.-

    Beitrag zuletzt geändert: 3.9.2011 21:09:29 von tion
  7. Soweit ich das sehe, tritt der Fehler in der Klasse SampServerTest in Zeile 92 auf.

    Jetzt wäre noch gut zu wissen, was in dem von dir geposteten Code Zeile 92 ist.

    mfg
  8. Autor dieses Themas

    tion

    Kostenloser Webspace von tion

    tion hat kostenlosen Webspace.

    /Edit: Zeile 92 in SampServerTest:

    Socket socketconnection = new Socket(serverip, serverport);


    Ich weiß 100%ig, dass der Server läuft -.-
    Kann es an einer Fehlinstallation von Java o.ä. liegen ?
  9. Kannst du denn mit dem herkömmlichen Weg über einen normalen Client auf diesem Port vverbinden?
    Die Exception bedeutet nicht, dass ein Server nicht läuft, sondern einfach, dass keine Antwort auf die Anfrage kam, egal aus welchem Grund. Das heißt es kann auch einfach der Server die Anfrage nicht aktzeptieren, aus welchem Grund auch immer. Vllt verwenden normale Samp-Clients einen entsprechenden User-Agent oder so.
    Von einem Fehler auf der Seite von Java würde ich bei sowas erstmal nicht ausgehen.
  10. Autor dieses Themas

    tion

    Kostenloser Webspace von tion

    tion hat kostenlosen Webspace.

    Kannst du denn mit dem herkömmlichen Weg über einen normalen Client auf diesem Port vverbinden?

    Ja kann ich
    Die Exception bedeutet nicht, dass ein Server nicht läuft, sondern einfach, dass keine Antwort auf die Anfrage kam, egal aus welchem Grund.

    Darüber habe ich auch schon nachgedacht, allerdings bekam ich diese Exception auch immer bei Minecraft wenn der Server offline war deswegen dachte ich, das heißt, dass der Server nicht erreichbar ist :D
    Die "Packetgenerierung" habe ich mir von PHP abgeguckt:
    private functionGeneratePacket($ip, $port, $password, $content)
    	{
    		$sPacket = 'SAMP';
    		$sPacket .= chr(strtok($ip, '.'));
    		$sPacket .= chr(strtok('.'));
    		$sPacket .= chr(strtok('.'));
    		$sPacket .= chr(strtok('.'));
    		$sPacket .= chr($port & 0xFF);
    		$sPacket .= chr($port >> 8 & 0xFF);
    		$sPacket .= 'x';
    		
    		$sPacket .= chr(strlen($password) & 0xFF);
    		$sPacket .= chr(strlen($password) >> 8 & 0xFF);
    		$sPacket .= $password;
    		$sPacket .= chr(strlen($content) & 0xFF);
    		$sPacket .= chr(strlen($content) >> 8 & 0xFF);
    		$sPacket .= $content;
    		
    		return $sPacket;
    	}

    und die Java-Version ( meine Version ):
    public static String GeneratePacket(String ip, String port, String password, String content)
    	{
    		String packet = "";
    		String[] newip = ip.split("\\.");
    		
    		for (char c : "SAMP".toCharArray())
    		{
    			packet += ((byte) c);
    		}
    		for (String s : newip)
    		{
    			packet += (byte) (char) Integer.parseInt(s);
    		}
    		packet += (byte) (Integer.parseInt(port) & 0xFF);
    		packet += (byte) (Integer.parseInt(port) >> 8 & 0xFF);
    		packet += "x";
    		packet += (char) (password.length() & 0xFF);
    		packet += (char) (password.length() >> 8 & 0xFF);
    		packet += password;
    		packet += (char) (content.length() & 0xFF);
    		packet += (char) (content.length() >> 8 & 0xFF);
    		packet += content;
    		return packet;
    	}

    Ich bin die beiden Versionen ein paar mal durchgegangen und sie sind ( in meinen Augen ) gleich :D
  11. Hast du denn mal mit var_dump in PHP bzw. print in Java überprüft, ob die beiden Funktionen wirklich dasselbe ausgeben?
    Das casten in byte sieht mir nämlich recht verwegen aus, da bei Java alle Datentypen signed sind, das heißt bei dem byte kommen unter Umständen negative Zahlen raus und Byte werden als Zahlen ausgegeben und nicht als deren Zeichenäquvalent.

    So hab mir mal die Mühe gemacht das zu testen und siehe da es kommen zwei total unterschiedliche Zeicheketten raus:
    PHP
    SAMPaxblabla2
    Java (kann ich wohl wegen utf8 nicht komplett kopieren)
    836577801270019730x


    Ab dem x ist alles gleich, aber davor happerts.
    Allerdings scheint es hier einiges zu geben, was komisch abläuft.
    Die Zeile scheint in PHP keine Auswirkungen zu haben, aber in Java wird sie korrekt ausgeführt:
    $sPacket .= chr($port >> 8 & 0xFF);


    Keine Ahnung warum die 30 bei PHP mit einem leeren String gleichgesetzt wird. Evtl. ein Bug von demjenigen der das PHPscript geschrieben hat und nur bei deinem Beispiel auftritt, weil der Autor des PHPscripts etwas nicht bedacht hat oder so.

    Aber probiers einfach mal mit der Javavariante:
    public static String GeneratePacket(String ip, String port, String password, String content)
    	{
    		String packet = "SAMP";
    		String[] newip = ip.split("\\.");
    
    		for (String s : newip)
    		{
    			packet += (char) Integer.parseInt(s);
    		}
    
    		packet += (char) (Integer.parseInt(port) & 0xFF);
    		packet += (char) (Integer.parseInt(port) >> 8 & 0xFF);
    		packet += "x";
    		packet += (char) (password.length() & 0xFF);
    		packet += (char) (password.length() >> 8 & 0xFF);
    		packet += password;
    		packet += (char) (content.length() & 0xFF);
    		packet += (char) (content.length() >> 8 & 0xFF);
    		packet += content;
    		return packet;
    	}


    Evtl. liegen aber auch noch ein paar andere Kodierungsfehler drin, da Java Utf8 mit 2 Byte einsetzt und PHP wohl AscII mit 1 Byte.

    Beitrag zuletzt geändert: 4.9.2011 13:06:18 von reimann
  12. Autor dieses Themas

    tion

    Kostenloser Webspace von tion

    tion hat kostenlosen Webspace.

    Vielleicht sollte ich mich echt einloggen, um zu antworten :D

    Dein Code geht leider auch nicht, ich denke mal, dass du recht hast und es genau daran liegt:
    Evtl. liegen aber auch noch ein paar andere Kodierungsfehler drin, da Java Utf8 mit 2 Byte einsetzt und PHP wohl AscII mit 1 Byte.

    Kann man das iwie ändern ? Es gibt eine App für Android / Symthian, in der auch ein Packet generiert wird... Soll Open Source sein, finde es nur nicht mehr :S
    Die App selber hätte ich auf meinem Computer :D

    Tion
  13. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!