# Problem mit Socket und ServerSocket



## problem (27. Aug 2006)

Hi,
ich habe mal wieder ein Problem mit Sockets.
habe folgenden quellcode: 

```
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.ServerSocket;
import java.net.Socket;

public class Server extends Thread{
        int port=0;
        public Server(){
                BufferedReader br=new BufferedReader(new InputStreamReader( System.in));
                try {
                        port=Integer.parseInt(br.readLine());
                        start();
                } catch (NumberFormatException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                }
        }
        public void run(){
                while(true){
                        try {
                                ServerSocket serverSocket = new ServerSocket(port);
                                Socket socket=serverSocket.accept();
                                ServerThread sT=new ServerThread(socket);
                                sT.start();
                        } catch (IOException e) {
                                // TODO Auto-generated catch block
                                e.printStackTrace();
                        }
                       
                }
        }
        public static void main(String args[]){
                new Server();
        }
}
class ServerThread extends Thread{
        Socket socket;
        public ServerThread(Socket s){
                socket=s;
        }
        public void run(){
                try {
                        ObjectInputStream ois = new ObjectInputStream(new BufferedInputStream(socket.getInputStream()));
                        String s=ois.readObject().toString();
                        ObjectOutputStream oos = new ObjectOutputStream(new BufferedOutputStream(socket.getOutputStream()));
                        oos.writeObject("Folgende dateien wurden empfangen:"+s);
                        oos.flush();
                        oos.close();
                        socket.close();
                        ois.close();
                } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                } catch (ClassNotFoundException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                }
        }
}
```


```
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.InetSocketAddress;
import java.net.Socket;
import java.net.SocketAddress;

public class Client {
        public Client(){
                System.out.print("Bitte Port eingeben:");
                BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
                try {
                        int port=Integer.parseInt(br.readLine());
                        System.out.print("Ip eingeben:");
                String ip=br.readLine();
                System.out.print("Nachricht eingeben:");
                String text=br.readLine();
                Socket socket = new Socket();
                SocketAddress sa = new InetSocketAddress(ip,port);
                socket.connect(sa);
                ObjectOutputStream oos = new ObjectOutputStream(new BufferedOutputStream(socket.getOutputStream()));
                oos.writeObject(text);
                oos.flush();
                ObjectInputStream ois = new ObjectInputStream(new BufferedInputStream(socket.getInputStream()));
                String antwort=ois.readObject().toString();
                ois.close();
                oos.close();
                System.out.println(antwort);
                } catch (NumberFormatException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                } catch (ClassNotFoundException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                }
               
        }
        public static void main(String args[]){
                new Client();
        }
}
```


```
java.net.BindException: Address already in use
at java.net.PlainSocketImpl.socketBind(Native Method)
at java.net.PlainSocketImpl.bind(PlainSocketImpl.java:359)
at java.net.ServerSocket.bind(ServerSocket.java:319)
at java.net.ServerSocket.<init>(ServerSocket.java:185)
at java.net.ServerSocket.<init>(ServerSocket.java:97)
at Server.run(Server.java:29)
```



Ich dachte bis jetzt das der ServerSocket die Socket-Verbindung über einen neuen Port abwickelt. Wenn ich den Socket in einem neuen Thread abarbeite müsste ich doch schon wieder an dem Standart port lauschen können. Was mache ich falsch?


----------



## SlaterB (27. Aug 2006)

wieso postest du deinen Client wenn das Problem direkt beim Starten des Servers auftritt?
oder wird eine erste Connection vom Client benötigt?
dann schreibe doch bitte ein bisschen zum Ablauf, z.B. dass der Fehler auftritt wenn sich der erste Client meldet,
klingt hilfreich oder? 

-----------

dein grundsätzliches Vorgehen ist falsch, 
sorum gehts

```
public void run(){
                                ServerSocket serverSocket = new ServerSocket(port);
                while(true){

                                Socket socket=serverSocket.accept();
                                ServerThread sT=new ServerThread(socket);
                                sT.start();
                }
        }
```
einmal den port belegen und nicht wieder hergeben,
'Address already in use' sagt dir ja, dass beim zweiten Belegen der Port schon in Verwendung ist


----------



## Guest (27. Aug 2006)

danke hat funktioniert


----------

