Zum Inhalt springen

Socket zu Port 80 und Stream lesen


Empfohlene Beiträge

Geschrieben

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

Geschrieben

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);

Geschrieben

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.

Geschrieben

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]

Geschrieben

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....

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...