Announcement

Collapse
No announcement yet.

Serververbindung extern

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Serververbindung extern

    Hallo und vorab vielen Dank an den- oder diejenigen Experten, die mir hier weiterhelfen, denn ich kriege es einfach nicht hin :-(, obwohl ich mich fast in den Wahnsinn lese. Wenn es möglich ist, bitte die Erklärungen so abzufassen, dass ich blutiger Anfänger damit zurecht komme ;-)

    Also hier ist der Core, der eine Verbindung zum (Chat)Server aufbaut. Von in.readLine wird der erste Zeichenstring ":c" (Meldung vom Server) aufgenommen, so dass auf die erste while-Bedingung (":")ein true kommen dürfte und out.println ausgeführt werden müsste - es passiert aber nichts und ich kriegs nicht hin, warum nichts passiert! Was mache ich falsch ? Auch die Anweisung out.print() bringt nichts und irgendwie habe ich das Gefühl, dass keine Daten an den Server gesendet werden, wobei die Verbindung steht! Sollte euch zusätzlich noch was verbesserungsfähiges an dem Source auffallen, für jede Art von Anregungen bin ich offen und nochmals vielen Dank - Achim

    <PRE>
    import java.io.*;
    import java.net.*;
    import java.util.*;

    public class BotU {

    private static String startchan = "Test";
    private static String botname = "TestBot";
    private static String passwd = "TestPass";
    private static String admin = "TestAdmin";

    public static void main(String args[]) {

    BufferedReader in;
    PrintStream out;
    Socket sock;

    try {
    sock = new Socket("www.testchat.de", 9999);
    in = new BufferedReader(new InputStreamReader
    (sock.getInputStream()));
    out = new PrintStream(sock.getOutputStream());
    System.out.println(sock);

    //Auf erste Servermeldung warten)
    System.out.println(in.readLine());
    while (!(in.readLine().startsWith(":"))) {}

    //als Bot anmelden
    out.println("Bl'm a bot.");
    //Username senden
    out.print("a"+botname);

    //Auf Passwortanfrage warten
    while (!(in.readLine().startsWith("c"))) {}
    //Passwort senden
    out.print("b"+passwd);

    //Auf full-login warten
    while (!(in.readLine().startsWith("!0"))) {}
    //Channel betreten
    out.print("c"+startchan);
    }
    catch (Exception e)
    {System.out.println(e);
    }
    }
    }
    </PRE>

  • #2
    Hast Du zu dem Kommunikationsprotokoll irgendwelche Unterlagen, also wer von Client/Server wann was sagt? Wenns ein eigenes Protokoll ist, hast Du sicher einen Schmierzettel, auf dem Du Dir das durchgedacht hast...<p>
    Wahrscheinlich kommt einfach vom Server nicht das zurueck, was Du erwartest bzw. irgendwo ist ein Deadlock drin. Dadurch, dass Du nicht mit Threads arbeitest, solltest Du eigentlich ziemlich gute Kontrolle ueber solche Kommunikations-Deadlocks haben.<p>
    Mein Tip: Erstmal mit einem eigenen Server das ganze durchspielen, oder den Server per <tt>telnet 9999</tt> bedienen, um sicher zu gehen, wieviele Zeilen gelesen werden muessen, bevor eine Eingabe durchkommt.<p>
    Gruss, Marc

    Comment

    Working...
    X