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()

1

2 Answers

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...

4

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'))

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

David Miller

David Miller

Executive Financial & Market Analyst

David Miller brings 15 years of experience in global economics, personal finance strategy, and market dynamics. He specializes in turning complex economic trends into actionable insights for everyday readers.

Share this article
Twitter Facebook Pinterest