Thread



  • Hi.
    Bin Gerade dran einen kleinen Webserver auf TCP Basis zu schreiben.
    Das mit den Sockets habe ich auch alle, nur was mir fehlt ist das der Server meherere Client anfragen beantworten kann. Ich habe das schon mit select() versucht, nur das Problem ist, dass sich nur auf port 80 daten übertragen kann.
    Jedoch will ich den Port variabel einstellen können.
    Deswegen wollte ich das ganze mit threads versuchen und bräuchte ein gutes tutorial dafür wenn jemand eins kennt!
    Vielen Dank schon mal im vorraus.



  • was haben Threads damit zu tun, über welchen Port du die Anfrage beantwortest. Außerdem wär der Client ziemlich überrascht, wenn seine Anfragen plötzlich einen anderen Port bekommen (wenn du intern für dich zur Unterscheidung verschiedene Ports nutzen willst, ist das deine Sache, raus geht es aber idr auf port 80)

    Und überhaupt: Welche Sprache?



  • Raus geht es nicht über Port 80.

    Client stellt Anfrage an Port 80. Beide handeln dann eine Verbindung auf einen freien Port aus.
    Somit ist Port 80 wieder frei und kann gebunden werden.
    Einfach erklärt.



  • Unix-Tom schrieb:

    Client stellt Anfrage an Port 80. Beide handeln dann eine Verbindung auf einen freien Port aus.
    Somit ist Port 80 wieder frei und kann gebunden werden.
    Einfach erklärt.

    aber nicht ganz richtig.
    ein http-client sendet immer seine daten (defaultmässig) zum server-port 80, die daten des servers gehen natürlich an die portnummer, die das client-tcp für diese verbindung gewählt hat (kann irgendeine sein).
    d.h. beim server ist port 80 dauerhaft gebunden.
    🙂



  • select reicht für 'nen primitiven Server vollkommen aus. Webserver belegen nur Port 80, sonst kannst du einfach 2 Prozesse mit unterschiedlichen Ports laufen lassen.
    Für große Server ist select weniger gut. Die fd_sets für Windows sind begrenzt, ich glaube nur 64 Verbindungen oder so. Das ist für HTTP 1.1/keep-alive ungünstig, Linux hat da mehr aufm Kasten, BSD kann sogar 512. Dennoch hast du da mit Threads eine gute Lösung. (Und C++0x std::thread macht es schön plattformunabhängig 🙂 )



  • Schau dir das hier mal an da steht wie es geht:

    http://www.c-worker.ch/tuts/select.php



  • Windows: Completion Ports


Anmelden zum Antworten