# Server Client läuft in Windows allerdings nicht in Linux



## Kabel (17. Jan 2007)

Hallo,

ich habe hier einen kleinen Chat programmiert, auf Basis von Server Socket Architecktur. Soweit keine Probleme läuft unter Windows Plroblemlos. Uner Linux jedoch zickt das Teil rum. 

Mein Chat ist folgendermassen aufgebaut:
CLIENT => SERVER => CLIENT

Das heisst alles läuft über einen Server so wie bei ICQ oder MSN, Jabber usw.

Ich weiss dass ich unter Linux dier ersten 1600 (?) Ports nicht benutzen darf da die für Root reserviert sind, nun ich krieg eine Fehlermeldung beim starten des Clients: "java.net.ConnectExeption: Connection refused"

Da das programm unter Windows läuft geh ich davon aus dass es irgendwie eine Kleinigkeit ist die ich nicht beachtet habe. Ich hoffe ihr könnt mir helfen und falls ihr mehr Infos benötigt dann fragt mich einfach, ich wusste nicht genau was hier relavant ist und was nicht.

Ich muss allerdings gestehen das ich noch nie was mit Netzwerk in Liiunx programmiert habe, darum sagt mir bitte was ich beachten muss, oder wo ich die Infos finden kann.

Ich freue mich auf eure Antowrten,

mfg
Kabel


----------



## jerchen (18. Jan 2007)

sind die ersten 1024 ports....

Das klingt nicht nach einem Javaproblem, sondern so, als ob die Firewall unter Linux eingeschaltet wäre. Versuch aufm Linux mal 

/etc/inid.d/iptables stop

damit stellst du die Firewall aus, dann sollte es gehen


----------



## Kabel (18. Jan 2007)

Aua, das ist peinlich^^

JA ich denke du has trecht, auf jeden Fall mal danke, ich werde es später testen.

mfg
Kabel


----------



## Kabel- (18. Jan 2007)

Hallo,

ich habe nun versucht die Firewall auszuschalten, jedoch bekomme ich immer noch die gleiche Fehlermeldung. Gibt es da noch Einstellungen vornehmen muss?


mfg
Kabel


----------



## Lim_Dul (18. Jan 2007)

Wie sieht den der Code aus zum öffnen des Ports, sowie zum verbinden des Clients?


----------



## Kabel- (18. Jan 2007)

Hi,

also der relevante Teil des Clients sieht folgendermassen aus:

```
public Client( String host, int port ) 
	{
//		Set up the screen
		setLayout( new BorderLayout() );
		add( "North", tf );
		add( "Center", ta );
//		Connect to the server
		try {
//			Initiate the connection
			socket = new Socket( host, port );
//			We got a connection! Tell the world
			System.out.println( "connected to "+socket );
//			Let's grab the streams and create DataInput/Output streams
//			from them
			din = new DataInputStream( socket.getInputStream() );
			dout = new DataOutputStream( socket.getOutputStream() );
//			Start a background thread for receiving messages
			new Thread( this ).start();
		}
		catch( IOException ie ) { System.out.println( ie ); }
	}
```
Server:

```
import java.io.*;

import java.net.*;

import java.util.*;

public class Server

{

//	The ServerSocket we'll use for accepting new connections

	private ServerSocket ss;

//	A mapping from sockets to DataOutputStreams. This will

//	help us avoid having to create a DataOutputStream each time

//	we want to write to a stream.

	private Hashtable outputStreams = new Hashtable();

//	Constructor and while-accept loop all in one.

	public Server( int port ) throws IOException {

//		All we have to do is listen

		listen( port );

	}

	private void listen( int port ) throws IOException {

//		Create the ServerSocket

		ss = new ServerSocket( port );

//		Tell the world we're ready to go

		System.out.println( "Listening on "+ss );

//		Keep accepting connections forever

		while (true) {

//			Grab the next incoming connection

			Socket s = ss.accept();

//			Tell the world we've got it

			System.out.println( "Incomming connection from "+s );

//			Create a DataOutputStream for writing data to the

//			other side

			DataOutputStream dout = new DataOutputStream( s.getOutputStream() );

//			Save this stream so we don't need to make it again

			outputStreams.put( s, dout );

//			Create a new thread for this connection, and then forget

//			about it

			new ServerThread( this, s );

		}

	}
```

Ich hoffe das war was du wolltest...

mfg
Kabel


----------



## Lim_Dul (18. Jan 2007)

Ja, sieht soweit ich das jetzt überblicke, auch richtig aus.

Dann mach mal folgendes, jeweils als root:

iptables -L -n

Wenn da folgendes rauskommt:

```
Chain INPUT (policy ACCEPT)
target     prot opt source               destination

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination
```
ist alles ok.
Wenn irgendwo was von DROP/REJECT steht, dann stimmt eventuell was nicht. Im Zweifellsfall hier posten

Dann startest du den Server und machst ein netstat -ln

Dann sollte eine Ausgabe ähnlich zu dieser kommen:

```
Aktive Internetverbindungen (Nur Server)
Proto Recv-Q Send-Q Local Address           Foreign Address         State
tcp        0      0 127.0.0.1:38920         0.0.0.0:*               LISTEN
tcp        0      0 0.0.0.0:139             0.0.0.0:*               LISTEN
...
```

Dort sollte als Port irgendwo der Port auftauchen, den dein Server verwendet.
Wenn dort 0.0.0.0 davorsteht ist alles in Ordnung, wenn was anderes davorsteht im Zweifellsfall hier posten.


----------



## Kabel- (18. Jan 2007)

Hallo,

danke für die nette Hilfe, bei dem ersten Befehl ist alles in Ordnung, beim 2. stimmt jedoch nicht alles denk ich mal. Hier der interessante Auszug:


```
tcp        0      0 :::6666                 :::*                    LISTEN
```

Nun da gibs nichts mit 0.0.0.0 :S

6666 ist der Port meines Servers. Was soll ich nun uternehmen?

Ich bedanke mich sehr für die Hilfe .

mfg
Kabel


----------



## Lim_Dul (18. Jan 2007)

Dürfte vermutlich aber auch ok sein. Eigentlich sollte dann alles funktionieren.

Was für einen Hostnamen übergibst du dem Client?


----------



## Kabel- (18. Jan 2007)

Hallo,

ja der Client connectet auf localhost:8801
müsste also auch meiner Meinung nach ok sein...

lol? 8801???? Aaaargghhhh... naja ich hab den Fehler gefunden :S localhost:6666 wäre angebrachter ^^

Ok ich bedanke mich nochmals für den netten und hilfreichen Beistand.

mfg
Kabel


----------

