@JonnyDamnnox: Ad 1.: Webserver wollen gerne eine Zeile haben die auch durch ein Zeilenendezeichen abgeschlossen ist. Sonst wissen sie nicht wann die Anfrage komplett ist. Der Webserver wartet also auf das Zeilenende bevor er antwortet, während Du auf die Antwort wartest.
Ad 2.: Ich sehe nicht warum die meisten Umbrüche in den Funktionsaufrufen gemacht wurden. Einzig der `format()`-Aufruf wäre sonst zu lang für eine Zeile.
Bei `connect()` fehlt ein Leerzeichen nach dem Komma.
Ansonsten sollte man das Socket-Objekt am Ende vielleicht noch schliessen. Entweder mit dessen `close()`-Methode oder mittels ``with``-Anweisung und `contextlib.closing()`.
Code: Alles auswählen
import socket
from contextlib import closing
def main():
with closing(socket.socket(socket.AF_INET, socket.SOCK_STREAM)) as sock:
print 'Simple socket(client) application: '
hostname = raw_input('Host eingeben (z.B. google.de):\n>')
request = raw_input('Was soll gesendet werden?\n>')
sock.connect((hostname, 80))
print 'Connected to: {0} (IP:{1}) message send: {2}'.format(
hostname, socket.gethostbyname(hostname), request
)
sock.sendall(request + '\n')
response = sock.recv(1024)
print response
if __name__ == '__main__':
main()
Wobei hier auch wieder die übliche Warnung gilt: *Ein* `recv()` reicht nicht garantiert aus um die gesamte Antwort zu lesen, selbst dann nicht, wenn sie kleiner als die dort angegebene Zahl von Bytes ist. Und natürlich ganz bestimmt nicht wenn die Antwort grösser als die dort angegebene Zahl ist.