Reputation: 13915
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?
Upvotes: 2
Views: 1517
Reputation: 55726
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.
Upvotes: 4