Java Echo-Server: Client/Server Anwendung

jojo-kahlua

Lt. Junior Grade
Registriert
Nov. 2012
Beiträge
271
Hallo Leute,
folgendes: ich will ein einfache EchoServer-Anwendung simulieren.
Dabei scheint es auch zu funktionieren bis zu dem Punkt "Socket client=server.accept();" - ab hier geht nichts mehr weiter. Nun weis ich, dass bei Server.accept() auf die Anmeldung des Clients gewartet wird - nur wie realisiere ich die Anmeldung?!
I-wie hänge ich da gerade bei der weiteren Vorgehensweise..

Server:
Code:
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package server;

/**
 *
 *
 */
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.logging.Level;
import java.util.logging.Logger;


public class Server {
	public static void main(String[] args) {
            new Server();
        }
        
        public Server(){
            try {
                initServer();
            } catch (IOException ex) {
                Logger.getLogger(Server.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
        
        private void initServer() throws IOException{
            ServerSocket server=new ServerSocket(5430);
            System.out.println("waiting for connection");
            Socket client=server.accept();
            System.out.println("connected");
            DataOutputStream out = new DataOutputStream(client.getOutputStream());
            DataInputStream in = new DataInputStream(client.getInputStream());
            
            String message;
            
            while(client.isConnected()){
                try{
                    message = in.readUTF();
                    System.out.println("Am Server: " + message);
                }
                catch(IOException ex){
                    System.out.println("Connection closed");
                    break;
                }
            out.writeUTF(message);
            }
            server.close();
            
            
        }
}

Client:
Code:
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package server;

import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.Socket;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 * 
 */
public class Client {
    public static void main(String[]args){

    }
    
    public Client(){
        try {
            connectToServer();
        } catch (IOException ex) {
            Logger.getLogger(Client.class.getName()).log(Level.SEVERE, null, ex);
        }  
    }
    
    private void connectToServer() throws IOException{
        Socket socket = new Socket("localhost",5430);
        
        DataOutputStream out = new DataOutputStream(socket.getOutputStream());
        DataInputStream in = new DataInputStream(socket.getInputStream());
        BufferedReader input = new BufferedReader(new InputStreamReader(System.in));
        
                while(true){
                    System.out.println("Geben sie eine Nachricht ein: ");
                    String in_string=input.readLine();
                    if(in_string.equals("1")){
                            socket.close();
                            in.close();
                            out.close();
                            break;
                    }
                    out.writeUTF(in_string);
                    String s = in.readUTF();
                    System.out.println("Am Client: " + s);
                }
                System.out.println("Connection closed");
   }       
}
 
also in die Client Klasse und run?
funktioniert nicht..
da kommt Fehlermeldung:
Code:
[COLOR="#FF0000"]SEVERE: null
java.net.BindException: Address already in use: JVM_Bind
	at java.net.DualStackPlainSocketImpl.bind0(Native Method)
	at java.net.DualStackPlainSocketImpl.socketBind(DualStackPlainSocketImpl.java:106)
	at java.net.AbstractPlainSocketImpl.bind(AbstractPlainSocketImpl.java:376)
	at java.net.PlainSocketImpl.bind(PlainSocketImpl.java:190)
	at java.net.ServerSocket.bind(ServerSocket.java:376)
	at java.net.ServerSocket.<init>(ServerSocket.java:237)
	at java.net.ServerSocket.<init>(ServerSocket.java:128)
	at server.Server.initServer(Server.java:34)
	at server.Server.<init>(Server.java:27)
	at server.Server.main(Server.java:22)

BUILD SUCCESSFUL (total time: 0 seconds)[/COLOR]
 
In der main Methode des Clients, solltest du natürlich auch, eine Instanz von Client erzeugen ;-) Client client = new Client();

Dann funktioniert das auch.
 
@DMX512:
Danke für den Hinweis, ist mir auch schon aufgefallen - hat aber leider nichts gebracht: immer noch die gleiche Fehlermeldung..
 
Also die Fehlermeldung, die du eben gepostet hast, kann nur auftreten, wenn du den Server zweimal startest, da dann der Port natürlich schon einmal belegt ist. Habe deinen Code getestet und bis auf die Fehlende Objektinstanz, funktioniert er.
 
Ebene auch von mir in Eclipse getestet, mit Objektinstanz funktioniert das ganze!

Pass auf, dass du die "Server" Anwendung korrekt beendest, ggf. Server und Client als 2 einzelne Projekte handhaben.
 
Zurück
Oben