Zum Inhalt springen

Anfängerfrage: Fehlermeldungen unter Eclipse


Kadaj

Empfohlene Beiträge

Hallo,

ich versuche mich grade an Socket-Programmierung und habe aus einem Buch ein Programm abgeschriebenm welches Daten Senden soll und diese dann wieder in einem Thread empfangen und ausgeben. Das ganze mache ich unter Eclipse unter Fedora17. Ich hatte zuvor schon einen Ping-Client udn Ping-Server geschrieben, der auf einem anedren Fedora-System auch funktioniert hatte, unter meinem neu aufgespielten aber beim Schließen des Sockets ( serverseitig ) noch eine seltsame Fehlermedung hinterherschmeißt. Aber vielleicht hilft ja erstmal das Programm aus dem Buch:


import java.io.*;
import java.net.*;

public class Read_Write {

public static void main(String[] args){

String S = null;
System.out.println("Host angeben:");

try{
BufferedReader eingabe = new BufferedReader( new InputStreamReader(System.in) );
S = eingabe.readLine();

Socket sock = new Socket(S,7);
InputStream in = sock.getInputStream();
OutputStream out = sock.getOutputStream();

sock.setSoTimeout(300);

//Ausgabethread erzeugen
OutputThread th = new OutputThread(in);

th.start();

//Schleife für Benutzereingaben
BufferedReader conin = new BufferedReader( new InputStreamReader(System.in) );
String line = "";

while(true){
line = conin.readLine();
if( line.equalsIgnoreCase("QUIT") ){
break; // Eingaben machen bis "QUIT" eingegeben wurde
}
out.write(line.getBytes());
out.write('\r');
out.write('\n');

// Ausgbe abwarten
th.yield();
}
//Programm beenden
System.out.println("Beende..");
th.requestStop();
th.yield();

try{
Thread.sleep(1000);
}catch( InterruptedException e ){}
sock.close();
}catch(Exception e){
System.err.println(e.toString());
e.printStackTrace();
System.exit(1);
}

}

}


class OutputThread
extends Thread
{
InputStream in;
boolean stoprequested;

public OutputThread( InputStream in ){
super();
this.in = in;
stoprequested = false;
}

public synchronized void requestStop(){
stoprequested = true;
}

public void run(){
int len;
byte[] b = new byte[100];
try {
while (!stoprequested) {
try{
if ((len = in.read() == -1) {
break;
}
System.out.write(b, 0, len);

} catch (InterruptedIOException e) {
//nochmal versuchen
}
}
}catch(IOException e) {
System.err.println("OutputThread: " + e.toString());
}
}
}
[/PHP]

Beim Ausführen dann der Fehler:

[code] [kadaj@atheros bin]$ java Read_Write Host angeben: localhost java.net.ConnectException: Verbindungsaufbau abgelehnt java.net.ConnectException: Verbindungsaufbau abgelehnt at java.net.PlainSocketImpl.socketConnect(Native Method) at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:339) at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:200) at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:182) at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:391) at java.net.Socket.connect(Socket.java:579) at java.net.Socket.connect(Socket.java:528) at java.net.Socket.<init>(Socket.java:425) at java.net.Socket.<init>(Socket.java:208) at Read_Write.main(Read_Write.java:15) [/code]

Ich versteh nicht was das Problem ist, immerhin ist das Beispiel aus einem Buch abgeschrieben, mit dem Unterschied, dass der Server als Argument übergeben wird und ich eine Benutzereingabe eingebaut habe. Kann das Problem an Eclipse liegen? Ich wundere mich auch, dass beim Erstellen einer neuen Klasse die main-Funktion nicht automatisch mit eingefügt wird, was auf meiner vorigen Fedora-Version der Fall war.

Kennt vielleicht jemand das Problem und kann mir helfen? Die Suche nach dieser Fehlermeldung hat mich leider nicht weiter gebracht.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo Kadaj,

vermute das hier der Fehler liegt:

Socket sock = new Socket(S,7);

du übergibst dem Konstruktor 2 Argumente, einmal die IP-Adresse und einmal die Portnummer.

Die Portnummer 7 gehört zu den Standardports.

Versuchs mal mit einer zwischen 1024–49151 :)

EDIT:

Port 7 sollte der Echo-Dienst sein, wenn dieser Dienst nicht läuft bekommt man eine Exception (java.net.ConnectException: Connection refused: connect)

Bearbeitet von Tom87
Link zu diesem Kommentar
Auf anderen Seiten teilen

Hey, danke für eure Hilfe. Beim Debugging hab ich erstmal etwas unwissend reingeschaut. Ich hab keine Option gefunden für "generate int main", sollte es nicht auch void heißen? Ich konnte auch nicht erkennen wo das Programm sich gade befindet. Vielleicht ist es bei "Fedora Eclipse" etwas anders angeordnet? Jedenfalls bin ich mir sicher, dass er rausspringt, sobald ich eine Verbindung zum localhost aufbauen möchte. Liegt es vielleicht nicht an Ecplise oder am Code sondern am Betriebssystem? Ich hab die Firewall auch mal ausgeschalten und den Port auf 3000 gesetzt und das Programm zusätzlich als root ausgeführt. Die Berechtigung sollte ich auf jeden Fall haben. Ich werd im Laufe des Tages mal versuchen das Programm auf eine Client und einem Server zur verteilen.

Übringens nehme ich zum Erlernen von Socket-Programmierung das Buch "Addison Wesley - Handbuch Der Java-Programmierung". Im Laufe der ersten 500 Seiten habe ich gemerkt, dass zwar alles gut erklärt ist aber für den Umfang an Information sehr wenig Beispiele zum nachbauen vorhanden sind. So, dass ich dazu neige, das Gelesene wieder zu vergessen^^ Da ich erstmal die nächsten Tage einen Beleg (Sockets) programmieren muss, hab ich erstmal 500 Seiten übersprungen. Sockets sind dafür wieder ganz gut erklärt, auch mit Beispielen. Oder kennt jemand vielleicht was besseres um sich umfangreiches Wissen für Netzwerkprogrammierung anzueignen?

Bearbeitet von Kadaj
Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo Kadaj,

nochmals zu deinem Problem: Du hast einen Client geschrieben der eine Verbindung zu einem Dienst aufbauen möchte, und zwar auf deinem Localhost unter Port 7... dein Problem wird sein, dass auf Port 7 kein Dienst läuft.

Blätter bei deinem Buch mal auf Seite 1164 (Vorausgesetzt natürlich du hast Auflage 6), sonst schau im Inhaltsverzeichnis nach "ECHO-Server für Port 7" ;)

Link zu diesem Kommentar
Auf anderen Seiten teilen

Gast runtimeterror

Noch als Ergänzung:

"main" ist in Eclipse ein Template. Ich stelle nach dem Erstellen der Klasse meist fest, dass ich den besagten Schalter zu setzen vergessen habe. Dann einfach den Cursor in den Klassen-Body, main eintippen und mit Strg+Leertaste das Template auswählen und bestätigen.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

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...