Oortael Geschrieben 27. Juli 2004 Geschrieben 27. Juli 2004 Hi, mein Programm soll sich mit Sockets zum Port 80 auf einer anderen Maschine connecten, und dort einen Stream lesen und in einen String packen. Das dauert aber elendig lang, kann man das irgenwie beschleunigen? Dazu mein Code: package socket.domain; import java.io.*; import java.net.*; public class Time { public Time(){}; /* * Gibt einen String mit der aktuellen Zeit zurück. * */ public String printTime(String ip, int port) { //Methoden Variablen deklarieren und initialisieren int i = 0; String s = null; StringBuffer sBuf = null; Socket sock1 = null; try { //Verbindung aufbauen InetAddress inet = InetAddress.getByName(ip); System.out.print("Host: "+ip); System.out.println("Connecting..."); sock1 = new Socket(inet, port); System.out.println("Connection available?\t"+sock1.isConnected()); InputStream ioStream = sock1.getInputStream(); System.out.println("ioStream angelegt"); byte[] b = new byte[100]; sBuf = new StringBuffer(); while ((i = ioStream.read() != -1) { sBuf.append(i); System.out.println("i appended."); } s = sBuf.toString(); ioStream.close(); sock1.close(); System.out.println("*** Socket closed. ***"); } catch (IOException e) { e.printStackTrace(); } return s; } public static void main(String[] args) { Time t = new Time(); String s = t.printTime("192.168.0.1", 80); System.out.println(s); } } [/code] Danke für eure Mühe. Schönen Abend noch. Codefiesler
Peeter Geschrieben 28. Juli 2004 Geschrieben 28. Juli 2004 Ja, ich weiß was so lange dauert... InetAddress inet = InetAddress.getByName(ip); ... deine Namensauflösung. Übergib lieber die IP direkt an dein Socket (da deine IP eh ein String ist). sock1 = new Socket(ip, port);
Oortael Geschrieben 28. Juli 2004 Autor Geschrieben 28. Juli 2004 Habs ausprobiert, geht aber trotzdem nicht schneller. Das Connecten ist gleich passiert, aber der rest dauert unendlich lang.
Peeter Geschrieben 29. Juli 2004 Geschrieben 29. Juli 2004 Versuch mal dein byte[100] etwas größer zu machen. Ich probier den Code bei mir mal aus....
Peeter Geschrieben 29. Juli 2004 Geschrieben 29. Juli 2004 JETZT weiß ich woran das liegt.... :beagolisc Also folgendes. Dein Programm passt soweit... Nur gibt es ein Problem. Der Webserver antwortet ja erst wenn der Client eine Anfrage schickt. Da du aber nichts durch deinen OutputStream jagst, reagiert der Webserver auch auf nichts... Verstehst du? Du bist zwar mit dem Webserver verbunden, jedoch gibt's dann irgendwann einen Timeout, weil nichts passiert... Nimm mal einen anderen Port um sowas zu testen, oder schicke eine "Anfrage" an den Webserver.
Oortael Geschrieben 29. Juli 2004 Autor Geschrieben 29. Juli 2004 Reicht es, wenn ich dann vor dem InputStream, diesen Code schreibe, OutputStream out = sock1.getOutputStream(); byte[] byteWrite = {0001}; out.write(byteWrite); oder muss ich ein bestimmtes Pattern einhalten? Mein Code sieht dann so aus: package socket.domain; import java.io.*; import java.net.InetAddress; import java.net.Socket; public class Time { public Time(){}; /* * Gibt einen String mit der aktuellen Zeit zurück. * */ public String printTime(String ip, int port) { //Methoden Variablen deklarieren und initialisieren int i = 0; String s = null; StringBuffer sBuf = null; Socket sock1 = null; try { //Verbindung aufbauen InetAddress inet = InetAddress.getByName(ip); System.out.print("Host: "+ip); System.out.println("Connecting..."); sock1 = new Socket(inet, port); System.out.println("Connection available?\t"+sock1.isConnected()); //Informationen vom Zeitserver holen //InputStreamReader ioStream = new InputStreamReader(sock1.getInputStream()); //Request schicken OutputStream out = sock1.getOutputStream(); byte[] byteWrite = {0001}; out.write(byteWrite); System.out.println("Bytes written."); //Zeit vom Server in Stream laden InputStream ioStream = sock1.getInputStream(); System.out.println("ioStream angelegt"); //zu lesende anzahl festlegen byte[] b = new byte[100]; //solang lesen bis stream keine daten mehr enthält sBuf = new StringBuffer(); while ((i = ioStream.read() != -1) { sBuf.append(i); System.out.println("i appended."); } s = sBuf.toString(); ioStream.close(); sock1.close(); System.out.println("*** Socket closed. ***"); } catch (IOException e) { e.printStackTrace(); } return s; } public static void main(String[] args) { Time t = new Time(); String s = t.printTime("192.168.0.1", 80); System.out.println(s); } } [/code]
Peeter Geschrieben 30. Juli 2004 Geschrieben 30. Juli 2004 Naja, du müsstest schon mindestens HTTP 1.0 einhalten, sonst gibt dein Webserver nur Quatsch zurück.... Schreib sowas wie "GET irgendwo/irgendwas" in den Stream und der Webserver gibt dir die entsprechende Seite zurück....
etreu Geschrieben 30. Juli 2004 Geschrieben 30. Juli 2004 GET /pfad/zu/deiner.datei HTTP/1.1\r\n Host: Hostname\r\n \r\n
Empfohlene Beiträge
Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren
Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können
Benutzerkonto erstellen
Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!
Neues Benutzerkonto erstellenAnmelden
Du hast bereits ein Benutzerkonto? Melde Dich hier an.
Jetzt anmelden