user449110
user449110

Reputation: 81

got problems about a simple server written by python

This is a simple server. When you open the browser type into the address of the server, and it will response a status code and the content of the requested html. But when I add this sentence "connectionSocket.send('HTTP/1.1 200 OK')", nothing returned. When I removed it, the html returned. And another problem is when I send the request by web browser, there are two connect sent to the server, and one displays it wanna find a file named favicon.ico, but of course it is a IOError because there is not such a file on my server's root directory. Code is attached and thanks for help.


#import socket module

from socket import *
serverSocket = socket(AF_INET,SOCK_STREAM)
#prepare a server socket

serverSocket.bind(('192.168.0.101', 8765))
serverSocket.listen(1)

while True:

    #Establish the connection

    print 'Ready to serve...'
    connectionSocket,addr =  serverSocket.accept()
    print 'connected from',addr
    try:
        message = connectionSocket.recv(1024)
        filename = message.split()[1]
        print filename
        f = open(filename[1:])
        outputdata = f.read()

        #Send one HTTP header line into socket

        #connectionSocket.send('HTTP/1.1 200 OK')

        #Send the content of the requested file to the client

        for i in range(0,len(outputdata)):
            connectionSocket.send(outputdata[i])
        connectionSocket.close()
    except IOError:
        print 'IOError'

        #Send response message for file not found

        connectionSocket.send('file not found')

        #Close Client socket

        connectionSocket.close()
serverSocket.close()

Upvotes: 4

Views: 18367

Answers (2)

Artur Grigio
Artur Grigio

Reputation: 5553

Have you tried converting the return value from string to bytes

Replace this:

connectionSocket.send('HTTP/1.1 200 OK\r\n\r\n')

With This

connectionSocket.send(bytes('HTTP/1.1 200 OK\r\n\r\n','UTF-8'))

Upvotes: 0

Daren Thomas
Daren Thomas

Reputation: 70344

You need to add to newlines (\r\n\r\n) to the end of the HTTP headers:

connectionSocket.send('HTTP/1.1 200 OK\r\n\r\n')

Also, you should probably be using a more higher level library for writing your HTTP server...

Upvotes: 6

Related Questions