# chat



## KingOfExceptions (17. Feb 2012)

kann mir jemand sagen was an diesem chat nicht funktioniert? Ich bekomme eine null pointer exception....

client


```
import javax.swing.*;
import java.awt.event.*;
import java.awt.*;
import java.io.*;
import java.net.*;


public class EinfacherChatClient
{
	JTextArea eingehend;
	JTextField ausgehend;
	BufferedReader reader;
	PrintWriter writer;
	Socket sock;
	
	public static void main(String[]args)
	{
		EinfacherChatClient client=new EinfacherChatClient();
		client.los();
	}
	
	public void los()
	{
		JFrame frame=new JFrame("Einfacher Chat");
		JPanel hauptPanel=new JPanel();
		eingehend=new JTextArea(15,20);
		eingehend.setLineWrap(true);
		eingehend.setWrapStyleWord(true);
		eingehend.setEditable(false);
		JScrollPane fScroller=new JScrollPane(eingehend);
		fScroller.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
		fScroller.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
		JButton sendenButton=new JButton("Senden");
		sendenButton.addActionListener(new SendenButtonListener());
		hauptPanel.add(fScroller);
		hauptPanel.add(ausgehend);
		hauptPanel.add(sendenButton);
		netzwerkEinrichten();
		
		Thread readerThread=new Thread(new EingehendReader());
		readerThread.start();
		
		frame.getContentPane().add(BorderLayout.CENTER, hauptPanel);
		frame.setSize(400,500);
		frame.setVisible(true);
	}
	
	private void netzwerkEinrichten()
	{
		try
		{
			sock=new Socket("localhost",5002);
			InputStreamReader streamReader=new InputStreamReader(sock.getInputStream());
			reader=new BufferedReader(streamReader);
			writer=new PrintWriter(sock.getOutputStream());
			JOptionPane.showMessageDialog(null, "Verbindung hergestellt");
		}
		catch(IOException ex)
		{
			JOptionPane.showMessageDialog(null, "Verbindung konnte nicht hergestellt werden");
		}
	}
	
	public class SendenButtonListener implements ActionListener
	{
		public void actionPerformed(ActionEvent evt)
		{
			try
			{
				writer.println(ausgehend.getText());
				writer.flush();
			}
			catch(Exception ex)
			{
				JOptionPane.showMessageDialog(null, "Mitteilung konnte nicht gesendet werden");
			}
			
			ausgehend.setText("");
			ausgehend.requestFocus();
		}
	}
	
	public class EingehendReader implements Runnable
	{
		public void run()
		{
			String nachricht;
			try
			{
				while((nachricht=reader.readLine())!=null)
				{
					System.out.println("gelesen: "+nachricht);
					eingehend.append(nachricht+"\n");
				}
			}
			catch(IOException ex)
			{}
		}
	}
}
```

server

```
import java.io.*;
import java.net.*;
import java.util.ArrayList;
import java.util.Iterator;


public class SehrEinfacherChatServer 
{
	ArrayList clientAusgabeStröme;
	
	public class ClientHandler implements Runnable
	{
		BufferedReader reader;
		Socket sock;
		
		public ClientHandler(Socket clientSocket)
		{
			try
			{
				sock=clientSocket;
				InputStreamReader isReader=new InputStreamReader(sock.getInputStream());
				reader=new BufferedReader(isReader);
			}
			catch(IOException ex){}
		}
		
		public void run()
		{
			String nachricht;
			try
			{
				while((nachricht=reader.readLine()) != null)
				{
					System.out.println("gelesen: "+nachricht);
					esAllenWeitersagen(nachricht);
				}
			}
			catch(IOException ex){}
		}
		
	}
	
		public static void main (String[] args)
		{
			new SehrEinfacherChatServer().los();
		}
		
		
		public void los()
		{
			clientAusgabeStröme=new ArrayList();
			
			try
			{
				ServerSocket serverSock=new ServerSocket(5002);
				
				while(true)
				{
					Socket clientSocket=serverSock.accept();
					PrintWriter writer=new PrintWriter(clientSocket.getOutputStream());
					clientAusgabeStröme.add(writer);
					Thread t=new Thread(new ClientHandler(clientSocket));
					t.start();
					System.out.println("habe eine Verbindung");
				}
			}
			catch(Exception ex){}
		}
		
		public void esAllenWeitersagen(String nachricht)
		{
			Iterator it=clientAusgabeStröme.iterator();
			while(it.hasNext())
			{
				try
				{
					PrintWriter writer=(PrintWriter) it.next();
					writer.println(nachricht);
					writer.flush();
				}
				catch(Exception ex){}
			}
		}
}
```


----------



## Gast2 (17. Feb 2012)

```
hauptPanel.add(ausgehend);
```
ausgehend wird nirgends instantiiert.


----------



## KingOfExceptions (17. Feb 2012)

super danke!!!! in welcher reihenfolge muss ich die denn ausführen? zuerst client oder server? server oder?


----------



## KingOfExceptions (17. Feb 2012)

und muss ich den port immer nach benutzung ändern?


----------



## Fab1 (17. Feb 2012)

den Port musst du nicht ändern. Du musst zuerst den Server und dann den/die Clients ausführen. Die Clients müssen nämlich mit dem Server kommunizieren. Dies funktioniert erst wenn der Server läuft


----------



## KingOfExceptions (18. Feb 2012)

kann ich diesen chat auch auf zwei anderen computern benutzen? zb:

Person 1 öffnet den server 
Person 1 öffnet den chat
Person 2 öffnet den chat
Person 1&Person 2 können gemeinsam chatten

dabei sind Person 1 und Person 2 nicht in dem gleichen internetnetzwerk.

Oder was müsste ich dafür ändern?


----------



## Gast2 (18. Feb 2012)

Natürlich musst du da am Code was ändern, du stellst die Verbindung aktuell immer zu "localhost" her.


----------



## KingOfExceptions (18. Feb 2012)

durch was sollte ich das dann verändern? dabei kann der server auf dem pc von person 1 ausgeführt werden...


----------



## Gast2 (18. Feb 2012)

Du musst irgendwie die IP des Servers einlesen. Entweder über nen Eingabefeld, per config Datei oder über die Eingabezeile.


----------



## KingOfExceptions (18. Feb 2012)

von wem die IP? von person 1?


----------



## Gast2 (18. Feb 2012)

Vom Server, die IP musst du ja beim Verbindungsaufbau angeben.


----------



## KingOfExceptions (18. Feb 2012)

sorry ich bin noch relativ neu in der netzwerkprogrammierung.... kann ich den server auf dem pc von person 1 laufen lassen? und dann die IP von person 1 angeben?


----------



## Gast2 (18. Feb 2012)

Wo der Server läuft ist egal. Alle Clients die sich verbinden wollen müssen nur die IP des Servers kennen/angeben.


----------



## KingOfExceptions (18. Feb 2012)

Werde mich nochmal melden wenn es Probleme gibt. Probiere einfach ein bisschen.


----------

