# Einfach Server der HTML img Tags austauscht



## .x (1. Nov 2014)

Hallo! Wir haben als Aufgabe bekommen, dass wir einen Server schreiben, der sich die HTML einer Seite holt, die img tags sucht und sie für eine beliebige bilddatei von uns ersetzt.

So alles schön und gut, es klappt auf Firefox. Allerdings sollen wir es in Google Chrome vorführen und da bekomme ich zum einen leere Seiten und zum anderen immer wieder folgenden Exception: 



> java.io.FileNotFoundException: 404 Not Found
> at sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source)
> at TCPServer_2.serveClient(TCPServer_2.java:88)
> at TCPServer_2.access$0(TCPServer_2.java:51)
> ...



Ich verstehe nicht wie ich das zum laufen bringen kann auf Chrome... 

Der Code dazu hier:


```
/**
 *
 */


import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.URL;
import java.util.regex.Pattern;

public class TCPServer_2 {

	String host = null;


	public static void main(String[] args) {
		TCPServer_2 s = new TCPServer_2();
		s.startServer();
	}

	void startServer() {
		ServerSocket serverSocket;
		try {
			serverSocket = new ServerSocket(8082, 10);
			while (true) {
				System.out.println("Server: waiting for client connection");
				final Socket aClientConnection = serverSocket.accept();
				Thread aThread = new Thread(new Runnable() {
					@Override
					public void run() {
						try {
							serveClient(aClientConnection);
						} catch (IOException e) {
							e.printStackTrace();
						}
					}
				});
				aThread.start();
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	private void serveClient(final Socket aClientConnection) throws IOException {
		BufferedReader fromClient;
		BufferedWriter toClient;
		BufferedReader fromServer;
		HttpURLConnection con;
		URL url;
		String header=null;
		String adresse = null;

		fromClient = new BufferedReader(new InputStreamReader(aClientConnection.getInputStream()));
		toClient = new BufferedWriter(new OutputStreamWriter(aClientConnection.getOutputStream()));

		header = fromClient.readLine();

		System.out.println(header + "halllllo");

		if(Pattern.matches("GET /www.*", header)) {
			adresse = (header.replaceAll("GET /www.", ""));
			adresse = (adresse.replaceAll("HTTP/1..", ""));
			adresse = (adresse.replaceAll(" ", ""));
			host = "http://" + adresse + "/";
			adresse = host;

		}
		else {
//			System.out.println();
			adresse = (header.replaceAll("GET /", ""));
			adresse = (adresse.replaceAll("HTTP/1..", ""));
			adresse = (adresse.replaceAll(" ", ""));
			adresse = host + adresse;
		}


		try {

			url = new URL(adresse);
			con = (HttpURLConnection) url.openConnection();
			fromServer = new BufferedReader(new InputStreamReader(con.getInputStream()));

			String msg;
			String regex = "(<img src=\"?.*[png|jpg|gif|bmp|jpeg]\"?\\s)|(<img src=\"?.*[png|jpg|gif|bmp|jpeg]\"?)";
			String replace = "<img src=\"http://fi.cs.hm.edu/fi/hm-logo.png\" ";

			String head = "";
			int i = 0;
			while(con.getHeaderField(i) != null) {
				if(con.getHeaderFieldKey(i) == null) {

					head = head + con.getHeaderField(i);
				}
				else {
					head = head + con.getHeaderFieldKey(i) + ": " + con.getHeaderField(i);
				}
				i += 1;
				head = head + "\n";
			}
			head = head + "\r\n";

			System.out.println(head);
			toClient.write(head);
			toClient.flush();

			while ((msg=fromServer.readLine()) != null) {
				toClient.write(msg.replaceAll(regex, replace));
			}
			toClient.flush();

		} catch (IOException e) {
			e.printStackTrace();
		}
		aClientConnection.close();
	}
}
```


----------



## ceving (2. Nov 2014)

Schon mal in Chrome und Firefox mit "Element untersuchen" die Netzwerk-Analyse angesehen und geguckt, wo die Unterschiede in den HTTP-Requests sind?


----------

