Seite 1 von 1

webserver ok, aber nur lokal? :o

Verfasst: Montag 26. Juli 2004, 15:16
von cbasstn
hallo,

ich hab mich mal an einem kleinen webserver mittels sockets probiert aber was auch immer ich versuche, es funktioniert nur lokal. sobald der server von einem anderen rechner aus aufgerufen wird kommt, daß die angeforderte datei keinen content enthalten würde, obwohl ich nicht existierende files mit 404 "abgefangen" habe.

hier der code:

Code: Alles auswählen

import sys,urllib
import socket
from string import *

# Socket oeffnen
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

debugmsg="Hallo?"
http_res="HTTP/1.1 200 OK\nDate: Wed, 05 Dec 2001 23:22:22 GMT\nServer: Apache/1.3.19 (Unix) mod_auth_pam/1.0a PHP/4.0.4pl1 mod_ssl/2.8.2 

OpenSSL/0.9.6\nLast-Modified: Tue, 27 Nov 2001 09:58:06 GMT\nConnection: close\nContent-Type: text/html"


page404="<html><body><b>404 - File nicht vorhanden</b></body</html>"
fehler="none"

def recvline (conn) :
        data = ''
        while 1 :
                d = conn.recv(1)
                if d == '\n' :
                        break
                if d != '\r' :
                        data = data + d
        return data

if len(sys.argv) > 2:
   print "Usage: my.py"
else:
     s.bind(('',80))
     s.listen(80)
     while 1:
        # auf naechste Verbindung warten
        sock,addr = s.accept()
        print "connect from", addr

        fehler="none"
        outpage="";
        # Daten vom Client lesen
        l = recvline(sock)

        if l != "QUIT":
           file_req_ar1=split(l,"/")
           file_req_ar2=split(file_req_ar1[1])
           file_req=file_req_ar2[0]
           print "file-requested: ", file_req
        else:
             print "client-Request: ", l


        if l != "QUIT":
           # sock.send(http_res)
           # sock.send("\r\n")
           # sock.send("\r\n")
           try:
               req=open("./htdocs/"+file_req)
               lines=req.readlines()
               for z in lines:
                   outpage=outpage + z
               req.close
               sock.send(outpage)
           except:
                  fehler="404"



           if fehler=="404":
              sock.send(page404)


        # Verbindung zum Client schliessen
        sock.close()

        # falls "QUIT" while-Schleife abbrechen
        if l == 'QUIT' :

                 break

# Server-Socket schliessen
s.close()
hat jemand eine idee? :)

Verfasst: Montag 26. Juli 2004, 16:51
von Sorgenkind

Code: Alles auswählen

else: 
     s.bind(('',80)) 
     s.listen(80) 
     while 1: 
        # auf naechste Verbindung warten 
        sock,addr = s.accept()
tausch des mal aus:

Code: Alles auswählen

else: 
     s.bind(('',80)) 
     while 1: 
        # auf naechste Verbindung warten 
        s.listen(1)
        sock,addr = s.accept()

Verfasst: Montag 26. Juli 2004, 18:03
von cbasstn
Hi, danke. Aber hat leider auch nichts gebracht. :roll:

Verfasst: Montag 26. Juli 2004, 18:53
von fs111
Was passiert, wenn Du bind() mit dem Hostnamen Deines Rechnerst aufrufst anstatt ''. Ich meine mich zuerinnern, dass der Socket dann nur an 127.0.0.1 gebunden ist, was ja von außerhalb nicht erreichbar ist.

fs111

Verfasst: Montag 26. Juli 2004, 22:20
von Sorgenkind

Code: Alles auswählen

               req=open("./htdocs/"+file_req) 
               lines=req.readlines() 
               for z in lines: 
                   outpage=outpage + z 
               req.close 
               sock.send(outpage)
is eigentlich schlecht? / falsch [ req.close() ! ]

Code: Alles auswählen

               req=open("./htdocs/"+file_req)  #bei windows führt das auf jeden fall zu problemen mit binärdateien
               sock.send(req.read())
               req.close()

Verfasst: Mittwoch 28. Juli 2004, 14:49
von cbasstn
@fs111
Wenn ich den Hostnamen einsetze funktioniert es nur noch mit http://hostname/...
Ob das im Netzwerk funktioniert konnte ich noch nicht testen, der andere Rechner ist derzeit tot, aber auf die Art funktioniert es jedenfalls nicht mit der IP, und würde wohl im www nicht funktionieren.

@Sorgenkind
Danke für die Hinweise!


Hmm, werd das ganze mal auf einem anderen Rechner versuchen, vielleicht ist in dem hier der Wurm drin. Werd dann nochmal posten was daraus geworden ist.