# socket aus hashmap lesen -> geschlossen



## Search (25. Okt 2004)

hallo

habe ein applet welches wenn es geladen wird einen listener aufmacht und auf einen server connectet. der server stellt dann eine verbindung zum client her und speichert das socket in einer hashmap. wenn ich nun über den key das socket auslese ist es geschlossen. warum ist das so? kann man keine sockets in einer hashmap speichern? gäbe es sonst eine andere möglichkeit? eine reconnect funktion gibt es ja nicht. 

danke und gruss


----------



## Roar (25. Okt 2004)

? was hat das jetzt mit deiner HashMap zu tun?
kanns sein dass vielleicht die verbindung gar nicht erfolgreich hergestellt werden kann? oder dass die verbindung wieder geschlossen wird? dass ne exception geworfern wird? oder n timeout auftaucht?


----------



## Search (25. Okt 2004)

eigentlich nicht... gleich nachdem die verbindung hergestellt ist schreibe ich dem client eine message welcher diese auch bekommt... danach speichere ich den socket in der hashmap... und lese ihn dann über den key wieder aus... erst dann wird eine exception geworfen, welche sagt das der socket geschlossen ist... 

hier mal ein paar code ausschnitte:

hashtable wird nur einmal angelegt und zwar in der init methode:


```
if (userConnection == null) userConnection = new Hashtable (20, 10);
```

hier wird der socket gespeichert und eine message an den client gesendet:


```
if(!userConnection.containsKey(message.getSender()))	
			{
				Socket socket = new Socket(clientIP,8050);
				userConnection.put(message.getSender(),socket);
				
				ObjectOutputStream out = new ObjectOutputStream(socket.getOutputStream());
				if( (out != null) && (message != null) )
				{
					try 
					{
						out.writeUnshared((Object)message);
						out.flush();
					}
					catch(IOException e)
					{
						String error = "Couldn't send object!!";
						System.err.println(error);
						e.printStackTrace();
					}
				}

				out.close();
				
				return true;
			}
			else
			{
				return false;
			}
```

hier wird der socket in einer anderen methode wieder ausgelesen...


```
Socket receiverSocket = (Socket) userConnection.get(gekkoMessage.getReceiver());
			
			String receiverIP = receiverSocket.getInetAddress().getHostAddress();
			
			
			
			if(receiverSocket.isClosed())
			{
				System.out.println("socket is closed :(");
			}
			
			ObjectOutputStream out = new ObjectOutputStream(receiverSocket.getOutputStream());
			if( (out != null) && (gekkoMessage != null) )
			{
				try 
				{
					out.writeUnshared((Object)gekkoMessage);
					out.flush();
				}
				catch(IOException e)
				{
					String error = "Couldn't send object!!";
					System.err.println(error);
					e.printStackTrace();
				}
			}

			out.close();
```

die receiverIP ist korrekt, das heisst der socket wird gespeichert... aus irgend einem grund wird er jedoch geschlossen... jemand ne ahnung wieso?

danke und gruss


----------

