Socket Netzwerkprogrammierung Anfängerfrage

Klösp

Aktives Mitglied
Hallo,
versuche mich im Moment mit Netzwerkprogrammierung in Java vertraut zu machen.
Habe erstmal versuch ein paar Zahlen zu übertragen.
Allerdings bekomme ich bisher nur
Exception in thread "main" java.net.ConnectException: Connection refused: connect .

Ist jemand so nett und könnte sich den Code anschauen?
Java:
import java.io.IOException;
import java.io.PrintWriter;
import java.net.Socket;
import java.util.Scanner;

public class Client {

    public static void main(String[] args) throws IOException {

        Socket server = null;

        try {
            server = new Socket("localhost", 8080);
            Scanner in = new Scanner(server.getInputStream());
            PrintWriter out = new PrintWriter(server.getOutputStream());

            out.print(2024L);
            System.out.print(in.nextLine());
        } finally {
            if (server != null) {
                server.close();
            }
        }
    }
}

Java:
import java.io.IOException;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;

public class Server {

    public static void main(String[] args) throws IOException {

        ServerSocket server = new ServerSocket(8080);

        while (true) {
            Socket client = null;
            try {
                client = server.accept();
                System.out.println("verbindung aufgebaut");
                doSomething(client);

            } finally {
                if (client != null) {
                    try {
                        client.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }
        }
    }

    private static void doSomething(Socket client) throws IOException {

        Scanner in = new Scanner(client.getInputStream());
        PrintWriter out = new PrintWriter(client.getOutputStream());

        String szahl = in.nextLine();
        long lzahl = Long.parseLong(szahl);

        out.print(lzahl * lzahl);
    }
}

Das sind bisher meine beiden Klassen zum Testen.

Vielen Dank im Vorraus
 
Zuletzt bearbeitet:

rme

Top Contributor
Hallo,

da ich keinen Fehler sehen konnte, habe ich den Code mal bei mir ausprobiert: Funktioniert.

Startest du den Server vor dem Client? Kommt dabei eine Fehlermeldung?
 

Klösp

Aktives Mitglied
Habs vermutlich falsch gemacht gestern.

Allerdings bekomme ich immer noch keine Ergebnis zurück.

Es wird zwar ausgegeben "Verbindung aufgebaut", aber Client gibt nicht das Ergebnis aus doSomething von Server aus.
 

rme

Top Contributor
Könnte daran liegen, dass der Client "print" benutzt: Dadurch wird nur die Zahl in den Stream geschrieben, aber kein Zeilenumbruch. Da der Server aber mit readLine eine ganze Zeile lesen will, wird das ewig blockieren.

Abhilfe: noch ein \n printen :)

Edit: Ebenso für's Rücksenden
 
Zuletzt bearbeitet:

Klösp

Aktives Mitglied
Da lag es vermutlich auch irgendwie dran.

Allerdings brauche ich scheinbar auf beiden Seiten auch noch ein out.flush();
Wieso ist mir noch nicht so ganz klar, und wieso es nicht funktioniert wenn ich stattdessen out.close() nehme!? Da ich die Reader/Writer ja eigentlich noch schließen müsste.
 

Ähnliche Java Themen


Oben