TCP Monitor

Status
Nicht offen für weitere Antworten.
D

DarKspiCe

Gast
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
 
D

DarKspiCe

Gast
Den Webservice sprech ich über n einfachen HTTP Request an. Im Moment versuch ichs über :
Code:
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:
Code:
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

Top Contributor
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.
Code:
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

Top Contributor
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)
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
A Zugriff auf einen fremden Monitor im lan Netzwerkprogrammierung 3

Ähnliche Java Themen

Neue Themen


Oben