# Mini-Chat löst BindException aus



## Reality (3. Aug 2004)

Hi,
zuerst rufe ich das Programm mit dem Argument "Hallo \n" auf und dann ohne Argument. Es laufen also 2 Programme gleichzeitig.
Mit Argument wird gesendet; ohne Argument wird empfangen.


```
import java.net.*;

class WriteServer {
  public static int serverPort = 666;
  public static int clientPort = 999;
  public static int buffer_size = 1024;
  public static DatagramSocket ds;
  public static byte buffer[] = new byte[buffer_size];

  public static void TheServer() throws Exception{
    int pos = 0;
     while(true){
       int c = System.in.read();

       switch(c){
         case -1:
           System.out.println("Server wird beendet.");
           return;

          case '\r':
            break;

          case '\n':
            ds.send(new DatagramPacket(buffer, pos, InetAddress.getLocalHost(), clientPort));
            pos = 0;
            break;

          default:
            buffer[pos++] = (byte) c;
       }
     }
  }

  public static void TheClient() throws Exception{
    while(true){
      DatagramPacket p = new DatagramPacket(buffer, buffer.length);
      ds.receive(p);
      System.out.println(new String(p.getData(), 0, p.getLength()));
    }
  }

  public static void main(String[] args) throws Exception{
    if(args.length == 1){
      ds = new DatagramSocket(serverPort);
      TheServer();
    }

    else{
      ds = new DatagramSocket(clientPort);
      TheClient();
    }
  }
}
```

Habe den Code von nem Buch, aber er scheint nicht zu funktionieren:



> java.net.BindException: Address already in use: Cannot bind
> at java.net.PlainDatagramSocketImpl.bind(Native Method)
> at java.net.DatagramSocket.bind(DatagramSocket.java:368)
> at java.net.DatagramSocket.<init>(DatagramSocket.java:210)
> ...



Habe das ganze local getestet und der Autor meint auch, dass man im Internet sein muss, was ich auch bin.

Liebe Grüße
Reality


----------



## L-ectron-X (3. Aug 2004)

Bin in der Netzwerkprogrammierung nicht so bewandert, kenne nur die Grundlagen.
Demnach interpretiere ich die Fehlermeldung so, dass Dein Computer wahrscheinlich schon den Port, der geöffnet werden soll, mit einer anderen Anwendung belegt hat.


----------



## Grizzly (3. Aug 2004)

Man sollte prinzipiell keine Ports unter 1024 benutzen, da diese für andere Dienste reserviert sind.

Außerdem kommt der Fehler bei mir meist, wenn ich mehrere Testläufe mache und vergessen habe das alte Programm zu beenden.


----------



## Reality (3. Aug 2004)

Hi,
auch die Portänderung in 1111 und 1112 hat nicht geholfen. Es kommt die Gleiche Exception.
Vielleicht mache ich bei der Ausführung des Programms etwas falsch...

Liebe Grüße
Reality


----------



## Grizzly (3. Aug 2004)

Ich hab das mal auf zwei Klassen aufgedrösselt. Im Endeffekt ist es das gleiche, sieht bloss anders aus  .

```
public class Client {
	public static final int PORT = 3000;
	
	private byte[] buffer = new byte[Server.BUFFER_SIZE]; 
	private DatagramSocket ds = null;
	
	public Client() {
		super();
	}
	
	public void run() throws SocketException, IOException {
		DatagramPacket packet;
		
		this.ds = new DatagramSocket(PORT);
		try {
			while (true) {
				packet = new DatagramPacket(this.buffer, this.buffer.length);
				this.ds.receive(packet);
				System.out.print(new String(packet.getData()));
			}
		} finally {
			this.ds.close();
		}
	}
	
	public static void main(String[] args) {
		Client client = new Client();
		try {
			client.run();
		} catch (Throwable t) {
			t.printStackTrace();
		}
	}
}
```


```
public class Server {
	public static final int PORT = 2000;
	public static final int BUFFER_SIZE = 60;
	
	private byte[] buffer = new byte[BUFFER_SIZE]; 
	private DatagramSocket ds = null;
	
	public Server() {
		super();
		Arrays.fill(buffer, (byte) 'a');
	}
	
	public void run() throws SocketException, IOException {
		this.ds = new DatagramSocket(PORT);
		BufferedReader reader;
		String command = null;
		DatagramPacket packet;
		
		try {
			while (!"quit".equals(command)) {
				reader = new BufferedReader(new InputStreamReader(System.in));
				command = reader.readLine();
				if ("send".equals(command)) {
					packet = new DatagramPacket(this.buffer, 0, this.buffer.length, InetAddress.getLocalHost(), Client.PORT);
					this.ds.send(packet);
				}
			}
		} finally {
			this.ds.close();
		}
	}
	
	public static void main(String[] args) {
		Server server = new Server();
		try {
			server.run();
		} catch (Throwable t) {
			t.printStackTrace();
		}
	}
}
```
Und bei mir funkt das wunderbar ???:L . Solange ich nicht mehere Server oder Clients gleichzeitig laufen lasse, treten keine Probleme auf  .


----------



## L-ectron-X (4. Aug 2004)

@Reality: Könnte es sein, dass Dir eine Firewall dazwischen funkt?


----------



## meez (4. Aug 2004)

L-ectron-X hat gesagt.:
			
		

> Demnach interpretiere ich die Fehlermeldung so, dass Dein Computer wahrscheinlich schon den Port, der geöffnet werden soll, mit einer anderen Anwendung belegt hat.



Zu 99% wahrscheinlich...


----------



## Reality (4. Aug 2004)

L-ectron-X hat gesagt.:
			
		

> @Reality: Könnte es sein, dass Dir eine Firewall dazwischen funkt?


Beim ersten Versuch habe ich sie abgeschalten, aber Fehlermeldung kam trotzdem.

@Grizzly: Danke werde ich morgen ausprobieren.

Liebe Grüße
Reality


----------

