[Sockets] Kann Serverantwort nicht abangen

Surma

Erfahrenes Mitglied
Folgende Klasse:
Code:
import java.net.* ;
import java.io.* ;

class ConnectionThread extends Thread
{
  private boolean active = true ;
  private Socket connection ;
  private String host ;
  private int port ;
  private BufferedInputStream in ;
  private BufferedOutputStream out ;

  public void setHost (String newHost)
  {
    host = newHost ;
  }
  
  public void setPort (int newPort)
  {
    port = newPort ;
  }
  
  public String getHost()
  {
    return host ;
  }
  
  public int getPort()
  {
    return port ;
  }
  
  public void start()
  {
    try
    {
      connection = new Socket (host, port) ;
      in = new BufferedInputStream(connection.getInputStream()) ;
      out = new BufferedOutputStream(connection.getOutputStream()) ;
    }
    catch (Exception e)
    {
      CrockBot.out.println ("Fehler mein Initilaisieren des Sockets:") ;
      active = false ;
      CrockBot.out.println (e.getMessage()) ;
    }
    super.start() ;
    CrockBot.out.println ("Thread gestartet") ;
  }

  public void run()
  {
    int i ;
    while (active)
    {
      try
      {
        byte[] incoming = new byte[1024] ;
        while (in.read (incoming) != -1)
        {
          CrockBot.out.println (new String(incoming)) ;
        }
        sleep (100) ;
      }
      catch (Exception e)
      {
        CrockBot.out.println ("Fehler waehrend Thread-run():") ;
        CrockBot.out.println (e.getMessage()) ;
      }
    }
  }

  public void kill()
  {
    active = false ;
    try
    {
      join() ;
      connection.close() ;
      CrockBot.out.println ("Thread abgebrochen") ;
    }
    catch (Exception e) {}
  }
}

Ich hab schon eineiges versucht, wie bloed gegooglet und im Java-Forum.net-Chat nachgefragt. Aber ich kriege ums verrecken nicht die erwueschte Antwort vom Server abgefangen, sondern werde nach 4 Sekunden mit der Antwort "ERROR :Closing Link: [80.129.181.66] (Ping timeout)" gekickt.
Hatte damit schonmal jemand Probleme und weis die Loesung?

PS: z.Z Connecte ich zu irc.phat-net.de Port: 6667 ;

MfG
Crock
 
Hallo!

Um ins IRC Netzwerk connecten zu können müsst du zuerst das passende RFC
google -> rfc IRC
durchwühlen um zu wüssen welche Befehlssequenz IRC zu Begin erwartet:

Code:
Nick nickname
User bla@hjhjjkdad.de #channel PRIVMSG TEST
Join #channel

(Hab die genaue Befehlssequenz nicht im Kopf kann da aber später nachschauen)

Einfach gleich nach dem connect als Strings an den Server senden. (Newline nach jedem "Satz" nicht vergessen...)

(Join ist Optional ...)

Wenn das geklappt hat kannst du ganz easy im IRC schreeben und lesen. Um dass richtige Format bei den Antwrotstrings hinzubekommen solltest du dir das RFC anschauen.

Zu beachten ist noch, dass viele IRC Server ab und an ein "PING" Signal schicken, auf welches du mit einem "PONG irchost" antworten musst. Das benutzen die IRC Server im "tote" Connections auszusortieren.

Gruß Tom
 
Das ist mir alles Klar!
Nur wenn ich via Telnet connecte erhalte ich erstmal (ohne jegliches Eingegeben zu haben,

:species.de.eu.phat-net.de NOTICE AUTH :*** Looking up your hostname...
:species.de.eu.phat-net.de NOTICE AUTH :*** Checking ident...
:species.de.eu.phat-net.de NOTICE AUTH :*** Checking for open socks server...
:species.de.eu.phat-net.de NOTICE AUTH :*** Found your hostname
:species.de.eu.phat-net.de NOTICE AUTH :*** No ident response; username prefixed
with ~
:species.de.eu.phat-net.de NOTICE AUTH :*** No socks server found (good!)...

Nichtmal das kann ich empfangen... an meinem Router liegts nicht,... ich denke, ich werd gleich mal ein simples h2h-Prog bauen, und schauen, ob es an meinem
erstem Thread-Klassen-Versuch liegt.

MfG
Crock
 
Hallo!

Schau dir dieses Beispiel mal an:

Code:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;

/*
 * Created on 22.06.2004
 *
 */

/**
 * @author Administrator
 * 22.06.2004
 **/
public class MiniIRC {

	public static void main(String[] args) {

		try {
			//Unsere Verbindung zum IRC Server..
			Socket socket = new Socket("irc.tutorials.de", 6667);

			//Unser Ausgabekanal
			PrintWriter out =
				new PrintWriter(
					new OutputStreamWriter(socket.getOutputStream()),
					true);

			//Unser Eingabekanal
			BufferedReader in =
				new BufferedReader(
					new InputStreamReader(socket.getInputStream()));

			String line = null;

			String nick = "testuser";

			//befehlssequenz zum anmelden am IRC Server
			out.println("NICK " + nick);
			out.println("USER " + nick + " hostname irc.tutorials.de  :Hallo");
			out.println("JOIN #programming");
			
			//Zeilen lesen bis Connection abgebrochen ...
			while ((line = in.readLine()) != null) {
				System.out.println(line);

				//Auf Ping reagieren um nicht herauszufliegen...
				if (line.indexOf("PING") == 0) {
					out.println("PONG :irc.tutorials.de");
					System.out.println("PONG");
					continue;
				}

			}

		} catch (UnknownHostException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

	}
}

Gruß Tom
 
Zurück