Seite 1 von 1

Webserver Socket Problem

Verfasst: Sonntag 13. Februar 2011, 20:40
von Wolke
Hey,
hab heute den ganzen Tag vergeblich versucht einen simplen Webserver zum laufen zu bekommen. Wird wohl nur ne Kleinigkeit sein, aber waere sehr froh wenn ihr mir helfen koenntet.
OS: Debian 2.6; Python 2.5.2; GCC 4.3.2;

Hier mein code:

Code: Alles auswählen

#!/usr/bin/env python 
# -*- coding: utf-8 -*-
 
#import socket for network communications 
import socket

host = ''
port = 8080

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

#create socket for IPv4/TCP
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
#bind the port to the socket
s.bind((host,port))
#listen on the specified port
s.listen(5)
print "The webserver is up and running, listening on port %i." % (port)

while 1:
 sock, addr = s.accept()
 print "Incomming connection from ", addr
 l = recvline(sock)
 print "Received from client: ", l
 if l == 'QUIT':
  break
 cmd = l.split()
 if cmd[0] == "GET" and len(cmd) == 3:
  print "Requested path and file:", cmd[1]
  html = "HTTP/1.0 200 OK\n\n"
  html += "<html><head><title>TestServer</title></head><body>"
  html += "Hello World!"
  html += "</body></html>"
  sent = sock.send(str(html))
  if sent == 0:
   print "socket error"
  else:
   print "it should have worked"
  print "Requested data sent."
 else:
  print "Unknown command."
 sock.close()
 print "Connection closed."
s.close()
Der Browser gibt nur "Fehler 101 (net::ERR_CONNECTION_RESET): Unbekannter Fehler" zurueck.

Es scheint als wuerde das HTML nicht durch den Socket geschickt, aber sock.send() ist auch nicht 0, hab wirklich keine Idee mehr woran das noch liegen koennte.

Re: Webserver Socket Problem

Verfasst: Sonntag 13. Februar 2011, 21:17
von BlackJack
@Wolke: Ich würde mal vermuten dass es daran liegt, dass Du nur eine Zeile von der hereinkommenden Verbindung liest. Mein Firefox hängt bei Deinem Server zum Beispiel weil der nicht anfängt die Antwort vom Server zu lesen, solange er seine komplette Anfrage nicht losgeworden ist.

Du solltest dringend an der Einrückung arbeiten. Empfohlen sind vier Leerzeichen pro Ebene.

Re: Webserver Socket Problem

Verfasst: Montag 14. Februar 2011, 19:13
von daemonTutorials
Naja, ich würde ja noch "Content-Type: text/html" dazugeben:

Code: Alles auswählen

# ...
html = "HTTP/1.0 200 OK;"
html += "Content-Type: text/html\n\n"
# ...
So würde ich es vorschlagen.

Re: Webserver Socket Problem

Verfasst: Montag 14. Februar 2011, 19:39
von Wolke
Das war genau das Problem, jetzt funktioniert alles. Vielen Dank!

Danke auch fuer den Hinweis mit dem Content-Type.