Webserver Socket Problem

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
Wolke
User
Beiträge: 2
Registriert: Sonntag 13. Februar 2011, 20:01

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.
Zuletzt geändert von Anonymous am Sonntag 13. Februar 2011, 20:58, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Code-Tags gesetzt.
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.
Benutzeravatar
daemonTutorials
User
Beiträge: 171
Registriert: Sonntag 6. Februar 2011, 12:06
Kontaktdaten:

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.
LG Maik
Wolke
User
Beiträge: 2
Registriert: Sonntag 13. Februar 2011, 20:01

Das war genau das Problem, jetzt funktioniert alles. Vielen Dank!

Danke auch fuer den Hinweis mit dem Content-Type.
Antworten