Anzeige:
Seite 2 von 2 ErsteErste 12
Ergebnis 16 bis 20 von 20

Thema: Ports?!

  1. #16
    Registrierter Benutzer Avatar von bischi
    Registriert seit
    10.04.2003
    Beiträge
    4.828
    Wie kann ich dann herausfinden, ob der Port bereits besetz ist? (ich meine, es könnte ja jemand sein Programm geschrieben haben ohne dies zu beachten...).

    MfG Bischi

    "There is an art, it says, or rather, a knack to flying. The knack lies in learning how to throw yourself at the ground and miss it" The hitchhiker's guide to the galaxy by Douglas Adams

    --> l2picfaq.pdf <-- www.n.ethz.ch/~dominikb/index.html LaTeX-Tutorial, LaTeX-Links, Java-Links,...

  2. #17
    Registrierter Benutzer Avatar von peschmae
    Registriert seit
    14.03.2002
    Ort
    Schweizland
    Beiträge
    4.549
    nu ja,

    Java wirft ne Exception, wenn der Port besetzt ist (je nach dem wie du auf ihn Zugreifen möchtest natürlich)

    Etwa so:
    public ServerSocket(int port)
    throws IOException

    Creates a server socket, bound to the specified port. A port of 0 creates a socket on any free port.

    ...

    Throws:
    IOException - if an I/O error occurs when opening the socket.
    dann wechselst du halt den Server einfachauf den nächsthöheren Port. Das Problem ist allerdings dann, dass der Client nicht weiss, auf welchem Port genau der Server läuft.

    Das könnte man evtl. mit einer Art "Handshake" lösen - der Client zählt einfach selbst ports rauf, bis er zu dem Kommt, auf dem der passende Server läuft.

    Allerdings kann das dauern, wenn du Java den Port einfach selbst aussuchen lässt - das wären dann ja im schlimmsten Fall ein paar 1000 Anfragen

    MfG Peschmä
    The greatest trick the Devil ever pulled was convincing the world he didn't exist. -- The Usual Suspects (1995)
    Hey, I feel their pain. It's irritating as hell when people act like they have rights. The great old one (2006)

  3. #18
    Registrierter Benutzer
    Registriert seit
    22.08.2002
    Ort
    Nürnberg
    Beiträge
    638
    Original geschrieben von bischi
    und da will heissen?
    Das ist ganz einfach. Es ist wie mit einem Hotel. Stell Dir vor die Telefonnummer eines Hotels ist die IP Adresse des Hotels. Einen Gast im Hotel kann man jetzt anrufen indem man die Telefonnummer des Hotels wählt (ok ohne die 0 am Ende) und dann die Zimmernummer des Gastes anhängt. Die Zimmernummer des Gastes ist also sowas wie die Portnummer. Wenn kein Gast in dem jeweiligen Zimmer da ist, kann man dort auch keinen erreichen - der Dienst läuft also nicht. Bestimmte Zimmernummern sind nunmal für bestimmte Gäste festvergeben, z.B. bekommen in höherwertigen Hotels bestimmte Gäste immer das gleiche Zimmer - ein Dienst bekommt immer die gleiche Portnummer. Dies muß natürlich einmal zugewiesen werden. Bevor ein Gast seinen Zimmerschlüssel bekommt, muß er sich ersteinmal an der Rezeption anmelden - der Dienst muß sich zum Starten im System anmelden. Wenn jetzt dummerweise das Zimmer belegt ist (ein anderer Gast ist schneller gewesen), dann verweigert die Rezeption den Zimmerschlüssel, weil das Zimmer halt belegt. Das gleiche mit dem Dienst, es meldet sich am System an und möchte einen bestimmten Port haben, wenn der aber schon belegt, dann gibt es halt eine Fehlermeldung. Normallerweise hat der Gast jetzt zwei Möglichkeiten, entweder erfährt jetzt wieder nach Hause, belegt also kein Zimmer, oder fragt die Rezeption nach dem nächsten freien Zimmer. Das gleiche der Dienst, entweder er gibt jetzt auf und startet nicht, oder er fragt im System nach dem nächsten freien Port, dies macht z.B. der Browser so. Er fragt im System nach einem freien Port, bekommt ihn und benutzt ihn dann und am Ende gibt er Ihn wieder frei - achso der Gast checkt am Ende natürlich auch wieder aus. Was passiert jetzt wenn jetzt in einem Zimmer ein anderer Gast ist als den ich erwarte, wenn ich anrufe. Ganz einfach der andere Gast weiß nicht was ich von ihm will. Das gleiche mit dem Dienst, wenn auf einem Port ein Serverdienst schon läuft und ein Client erwartet aber einen anderen reden sie aneinander vorbei.

    Wie Du das ganze nun programmierst, hängt jetzt von deiner Programmiersprache ab. Aber in jeder Programmiersprache gibt es jetzt entsprechende Funktionen um einen Port zu öffnen (sich an der Rezeption anzumelden) und dann teilt einem das System über einen Rückgabewert der Funktion mit ob des jetzt gut gegangen ist oder nicht.

    Ich will jetzt nicht böse oder herablassend klingen, aber bevor Du Dich schon konkret mit irgendwelchen Ports auseinadersetzt, würde ich mir ersteinmal ansehen wie in der Programmiersprache meiner Wahl die Socketprogrammierung funktioniert. Persönlich muß ich jetzt sagen, ich habe noch keine Socketprogrammierung in irgendeiner Sprache durchgeführt, ich weiß nur wie es prinzipiell funktioniert. In PHP wäre eine entsprechende Beschreibung z.B. hier zu finden: http://www.php.net/manual/de/ref.sockets.php
    Die Frage welche Port, die stellt man als allerletztes. Denn der dann verwendete Port wird meistens über eine Konstante eingestellt. Meine Apachen kann ich ja auch über die Konfiguration mitteilen, dass er demnächst nicht mehr auf Port 80 sondern meinetwegen auf Port 8080 laufen soll.

    Gruß

    Pingu
    Geändert von Pingu (12-11-2003 um 13:29 Uhr)

  4. #19
    Registrierter Benutzer Avatar von bischi
    Registriert seit
    10.04.2003
    Beiträge
    4.828
    @pingu: Danke vielmals für die ausführliche Erklärung. Ich glaub, jetzt hab ichs verstanden. Zu der Programmiersprache: Ich verwende Java und hab mich schon damit auseinandergesetzt. Mein einziges Problem war, dass ich nicht gewusst habe, welche Ports ich zuweisen darf,...

    MfG Bischi

    "There is an art, it says, or rather, a knack to flying. The knack lies in learning how to throw yourself at the ground and miss it" The hitchhiker's guide to the galaxy by Douglas Adams

    --> l2picfaq.pdf <-- www.n.ethz.ch/~dominikb/index.html LaTeX-Tutorial, LaTeX-Links, Java-Links,...

  5. #20
    Registrierter Benutzer Avatar von fs111
    Registriert seit
    23.03.2002
    Beiträge
    594
    Original geschrieben von anda_skoa
    Hmm, muss ich mal ausprobieren.
    Das letzte mal als ich dort was mit Sockets gemacht habe war da unter Win98, das kannte noch keine Rechtetrennng.

    Ciao,
    _
    Das ist unter Win AFAIK völlig losgelöst von anderen Rechten. Jeder Benutzer kann bspw. problemlos einen Apach auf Port 80 betreiben, auch unter den NT-basierten.

    fs111

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •