webserver ok, aber nur lokal? :o

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
cbasstn
User
Beiträge: 3
Registriert: Montag 26. Juli 2004, 15:10

Montag 26. Juli 2004, 15:16

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? :)
Sorgenkind
User
Beiträge: 34
Registriert: Samstag 24. Juli 2004, 19:25
Kontaktdaten:

Montag 26. Juli 2004, 16:51

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()
cbasstn
User
Beiträge: 3
Registriert: Montag 26. Juli 2004, 15:10

Montag 26. Juli 2004, 18:03

Hi, danke. Aber hat leider auch nichts gebracht. :roll:
fs111
User
Beiträge: 170
Registriert: Samstag 15. November 2003, 11:42
Kontaktdaten:

Montag 26. Juli 2004, 18:53

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
Pydoc-Integration in vim - Feedback willkommen: http://www.vim.org/scripts/script.php?script_id=910
Sorgenkind
User
Beiträge: 34
Registriert: Samstag 24. Juli 2004, 19:25
Kontaktdaten:

Montag 26. Juli 2004, 22:20

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()
cbasstn
User
Beiträge: 3
Registriert: Montag 26. Juli 2004, 15:10

Mittwoch 28. Juli 2004, 14:49

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