Included below is the code that I am currently using:
#! /usr/bin/python
print 'Content-type: application'
print '\n\n'
import SocketServer
import cgitb
cgitb.enable()
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.sendall(self.data.upper())
self.request.sendall('Data Received')
if __name__ == "__main__":
HOST, PORT = "localhost", 9989
# Create the server, binding to localhost on port 9989
server = SocketServer.TCPServer((HOST, PORT), MyTCPHandler)
# Activate the server; this will keep running until you
# interrupt the program with Ctrl-C
server.serve_forever()
The code works as expected on localhost, but is unresponsive on public server.
In addition, executing the code twice results in the following error message:
error: (98, 'Address already in use')
error: (98, 'Address already in use')
You need this for that:
socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
but is unresponsive on public server.
Usually in case of shared hosting, you cant get through with creating a socket. In any case you could try the following, to see if it helps:
HOST, PORT = "", 9989 # or (public_IP,9989)
I think the problem is that you are binding to "localhost"
, i.e., on the loopback interface. Try replacing "localhost"
with the public IP address you want to bind to. Type ifconfig at the command line if you're not sure what that is; pick the address that's not in any one of the IP blocks designated for private use (i.e., doesn't start with 10. or 192.168. etc).
I'm not sure if it will work with TCPServer specifically but often software that requires you to bind to a specific interface will accept "0.0.0.0"
for all interfaces, or an empty string to the same effect.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With