# TCP Monitor



## DarKspiCe (16. Aug 2004)

Hoi, 
ich habe ein kleines Problem mit dem TCP Monitor. Ich will einen Web Service ansprechen, der ein HTTP bzw. SOAP Response sendet, und diesen dann abfangen, und anzeigen lassen. Dazu sollte eigentlich der TCP Monitor eingesetzt werden. Dazwischen ist noch DynDNS eingesetzt. 
Leider zeigt mir der Monitor nichts an. Der 8080 Port auf den ich die Response schicke ist freigeschaltet.
Hatt jemand eine Idee, wie ich ihn konfigurieren muss (Proxy oder sonstwas ?) damit ich die Nachricht angezeigt bekomme ?
Danke für alle Tipps,
DarKspiCe


----------



## thE_29 (17. Aug 2004)

Hat das überhaupt was mit JAVA zum tun?

_Verschoben nach Netzwerkprogrammierung_


----------



## pogo (17. Aug 2004)

wie sprichst du den web service an?


----------



## DarKspiCe (19. Aug 2004)

Den Webservice sprech ich über n einfachen HTTP Request an. Im Moment versuch ichs über :

```
import java.net.*;
import java.io.*;

public class Connection1 {
	public static void main(String[] arg) {
		
		try {
			// Construct data
			String data = URLEncoder.encode("Data", "UTF-8") + "=" + URLEncoder.encode("content", "UTF-8");
                           data += "&" + URLEncoder.encode("Data1", "UTF-8") + "=" + URLEncoder.encode("content1", "UTF-8");
			// Send data
			URL url = new URL("http://Webservice/Aufruf");
			URLConnection conn = url.openConnection();
			conn.setDoOutput(true);
			OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream());
			wr.write(data);
			wr.flush();
			System.out.println("Mall request send...waiting for response");
    
			// Get the response
			BufferedReader rd = new BufferedReader(new InputStreamReader(conn.getInputStream()));
			System.out.println("rd:" + rd);
			String line;
			System.out.println("Input Stream Reader opened");
			while ((line = rd.readLine()) != null) {
				System.out.println("Response:" + line);
			}
			wr.close();
			System.out.println("Output Stream Writer closed");
			rd.close();
			System.out.println("Input Stream Reader closed");
		} catch (Exception e) {
			System.out.println(e);
		}
	}
}
```

als Sytem out erhalt ich dann:

```
Mall request send...waiting for response
rd:java.io.BufferedReader@1bab50a
Input Stream Reader opened
Output Stream Writer closed
Input Stream Reader closed
```

ich komm also leider nicht richig in die Schleife rein, um mir den Inhalt anzeigen zu lassen.
Allgemein geht es darum, n HTTP Request abzusetzen und den Response anzeigen zu lassen,und die Daten dann umzuformatieren. Auf den Response hab ich keinen Einfluss, was die Formatierung betrifft. Wie kann ich also den Response anzeigen lassen, bzw. damit weiterarbeiten. Ist der Ansatz überhaupt richtig, ich hoffe schon.
Danke für alle Antworten und Anregungen.


----------



## semi (20. Aug 2004)

Hast Du es mit einem Remote-Debugger versucht? 
Alternativ kannst Du einen RelayServer dazwischen schalten,
der die ganze Kommunikation auf die Console ausgibt.

Hier eine einfache Implementierung eines solchen Servers,
der aber alles, egal ob ASCII oder binär, auf die Console
ausgibt.

```
import java.io.*;
import java.net.*;

class RelayServer implements Runnable {
  Socket in_s;
  Socket out_s;
  String message;

  public RelayServer(Socket in, Socket out, String msg) {
    in_s = in;
    out_s = out;
    message = msg;
  }

  public void run() {
    try {
      InputStream in = in_s.getInputStream();
      OutputStream out = out_s.getOutputStream();
      byte[] buf = new byte[8192];
      int len;

      while((len=in.read(buf))!= -1) {
        System.out.println(message);
        System.out.println(new String(buf, 0, len));
        out.write(buf, 0, len);
      }
    }
    catch (Exception e) {
      System.out.println(message + ": " + e.getMessage());
    }
    finally {
      try { in_s.close(); }  catch (Exception e2) { }
      try { out_s.close(); } catch (Exception e2) { }
    }
  }

  public static void main(String[] args) {
    ServerSocket srvr = null;

    try {
      srvr = new ServerSocket(Integer.parseInt(args[1]));
      while(true) {
        Socket sclient = srvr.accept();
        System.out.println("Verbinde mit " + args[0]);
        Socket ssrvr = new Socket(args[0], Integer.parseInt((args.length>2)?args[2]:args[1]));
        System.out.println("Verbunden mit " + args[0]);
        (new Thread(new RelayServer(sclient, ssrvr, "CLIENT->SERVER"))).start();
        (new Thread(new RelayServer(ssrvr, sclient, "SERVER->CLIENT"))).start();
      }
    }
    catch (Exception e) {
      System.out.println("SERVER TERMINATED: " + e.getMessage());
      e.printStackTrace();
      try { srvr.close(); } catch (Exception e2) {}
    }
  }
}
```
Aufruf:

java RelayServer zielhost port
oder
java RelayServer zielhost port-lokal port-remote

z.B.
java RelayServer sopapsrv.dyndns.org 8080
und in Deinem Programm localhost:8080

Gruß,
Michael


----------



## semi (20. Aug 2004)

Die Codeformatierung hier spinnt ein wenig.
So sollen die ersten Zeilen der run()-Methode  aussehen:

public void run() {

    try {
      InputStream in = in_s.getInputStream();
      OutputStream out = out_s.getOutputStream();

Woher kommt die komische Formatierung? ???:L
(InputStream" target="_blank"> wurde hinzugefügt)


----------

