19889

Python SocketServer works on localhost but not on server

Question:

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:

<blockquote>

error: (98, 'Address already in use')

</blockquote>

Answer1:

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.

Answer2:

<blockquote>

error: (98, 'Address already in use')

</blockquote>

You need this for that:

socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) <hr /><blockquote>

but is unresponsive on public server.

</blockquote>

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)

Answer3:

You have to use "localhost" by gethostbyname() function:

server = SocketServer.TCPServer((socket.gethostbyname(HOST), PORT), MyTCPHandler)

But you have to keep in mind that some machines doesn't understand "localhost" and you have to use the local host IP address , 127.0.0.1 instead.

Answer4:

You can't run it twice because you have a static port address (9989). There can only be one listener bound to a port. There can be more than one incoming connection to the port, but only one listener.

Also, have you checked the firewall settings. Wherever your python server is running, the firewall has to give port 9989 permission to accept incoming connections. Also, if your server is behind a hub, the hub has to be told which host will be handling port 9989.

Recommend

  • Get a variable from a running program
  • ValueError in Thread callback function - Trying to update FTP progress
  • Chat Client/Server problems on Python
  • Accessing function attribute created in a decorator outside that decorator
  • Python subprocess change dir via client/server
  • UnicodeEncodeError: 'ascii' codec can't encode character u'\\xfa' in posi
  • Animate using a pixmap or image sequence in Python with QT4
  • dbus Variant: How to preserve boolean datatype in Python?
  • Multiprocessing pool example (parallel) is slower than sequential. Trying to understand pool in pyth
  • How can I write a recursive function to reverse a linked list?
  • Pyglet uses too much cpu
  • Android NFC read Tags issue. Activity starts each time on data received
  • openssl handshake failed
  • Why dill dumps external classes by reference, no matter what?
  • How to resolve docker host names (/etc/hosts) in containers
  • Certain Arabic text gets incorrectly shown while other Arabic text gets showed normally?
  • JSON - slashes not escaping
  • CORS with socket.io
  • .NET video play library which allows to change the playback rate?
  • mave 3.2 not able to access local nexus instance return 502 code
  • Detecting null parameter in preprocessor macro
  • Prevent Tomcat from caching request during starup
  • Tomcat memory Leak
  • Button text different than value submitted in query string
  • Odoo 10 - Overriding unlink method
  • Access Android Market through SSH tunnel
  • How to run “Deployd” on port 80 instead of port 5000 in webserver.
  • Cannot resolve symbol 'MyApi'
  • Updating server-side rendering client-side
  • Javascript convert timezone issue
  • Font Awesome Showing Box instead of Icons
  • Properly structure and highlight a GtkPopoverMenu using PyGObject
  • Proper way to use connect-multiparty with express.js?
  • embed rChart in Markdown
  • need help with bizarre java.net.HttpURLConnection behavior
  • Is it possible to post an object from jquery to bottle.py?
  • How to get NHibernate ISession to cache entity not retrieved by primary key
  • How can I use `wmic` in a Windows PE script?
  • Unable to use reactive element in my shiny app
  • Python/Django TangoWithDjango Models and Databases