2

I am getting error when trying to run Python socket http server.

    import SocketServer

class MyTCPHandler(SocketServer.BaseRequestHandler):
    """
    The RequestHandler class for our server.

    It is instantiated once per connection to the server, and must
    override the handle() method to implement communication to the
    client.
    """

    def handle(self):
        # self.request is the TCP socket connected to the client
        self.data = self.request.recv(1024).strip()
        print "{} wrote:".format(self.client_address[0])
        print self.data
        # just send back the same data, but upper-cased
        self.request.send(self.data.upper())

if __name__ == "__main__":
    HOST, PORT = "localhost", 9999

    # Create the server, binding to localhost on port 9999
    server = SocketServer.TCPServer((HOST, PORT), MyTCPHandler)

    # Activate the server; this will keep running until you
    # interrupt the program with Ctrl-C
    server.serve_forever()

Error:

C:\Python25>python index.py
----------------------------------------
Exception happened during processing of request from ('127.0.0.1', 2506)
Traceback (most recent call last):
  File "C:\Python25\lib\SocketServer.py", line 222, in handle_request
    self.process_request(request, client_address)
  File "C:\Python25\lib\SocketServer.py", line 241, in process_request
    self.finish_request(request, client_address)
  File "C:\Python25\lib\SocketServer.py", line 254, in finish_request
    self.RequestHandlerClass(request, client_address, self)
  File "C:\Python25\lib\SocketServer.py", line 521, in __init__
    self.handle()
  File "index.py", line 15, in handle
    print "{} wrote:".format(self.client_address[0])
AttributeError: 'str' object has no attribute 'format'
----------------------------------------

And my client:

import socket
import sys

HOST, PORT = "localhost", 9999
data = " ".join(sys.argv[1:])

# Create a socket (SOCK_STREAM means a TCP socket)
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

try:
    # Connect to server and send data
    sock.connect((HOST, PORT))
    sock.send(data + "\n")

    # Receive data from the server and shut down
    received = sock.recv(1024)
finally:
    sock.close()

print "Sent:     {}".format(data)
print "Received: {}".format(received)

This is example given on Python official website

What is wrong here?

1
  • @blahdiblah: From the OP's question: C:\Python25>python index.py So yes, Python 2.5 it is. Commented Dec 10, 2011 at 9:22

1 Answer 1

4

From the Python website:

format(value[, format_spec]) Convert a value to a “formatted” representation, as controlled by format_spec. The interpretation of format_spec will depend on the type of the value argument, however there is a standard formatting syntax that is used by most built-in types: Format Specification Mini-Language.

New in version 2.6.

So I guess you should upgrade your Python version.

Or use another syntax:

print "%s wrote:" % self.client_address[0]

If self.client_address[0] can be converted to a string.

Sign up to request clarification or add additional context in comments.

1 Comment

Thank You very Much! I upgraded to Python 2.7 and this worked!

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.