вашей главной проблеме является отсутствие новой строки после "GET /".Протокол HTTP требует новой строки, поэтому сервер ждет его, поэтому вы ждете ответа.
(Небольшая проблема заключается в том, что размер вашего буфера слишком велик, модуль сокетов Python рекомендуетнебольшая степень 2, например 4096.)
Я предлагаю:
import socket
size = 4096
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
host = "localhost"
port = 80
s.connect((host, port))
stuff = "GET /\n"
s.send(stuff)
buf = ''
while True:
r = s.recv(size)
if not r: break
buf += r
print(buf)
Цикл в конце гарантирует, что вы получите полный ответ.
И, наконец,Я рекомендую urllib2, который реализует для вас HTTP и избегает таких ошибок:
import urllib2
print(urllib2.urlopen('http://localhost').read())