Raw TCP Listen Socket on Cloud or Web Server
Question: I have hardware that connects to raw TCP socket on any given IP and port
combination. It then continually sends characters. The following piece of
Python code may give you an idea of what the hardware does.

    
    
    import socket
    
    serverIP = '*server IP or domain*'
    serverPort = 60000
    
    Sock = socket(AF_INET, SOCK_STREAM)
    Sock.connect((serverIP, serverPort))
    while (1):
    f = open ("send-data.txt","r")
    while 1:
        c = f.readline()
        if not c:
            break
    Sock.send(c + '\n')
    
    Sock.shutdown(0)
    Sock.close()
    

When this code is run it exactly behaves like my hardware system. The `send-
data.txt` file contains characters similar to what hardware sends.

I have written a socket server in Python using `SocketServer` library. It
allows connections, receives character stream, and stores it into a local
(newly created) file. Currently, I am running this code on my system, as
`localhost` and it works. I would like to serve these files through a webpage.

I want to be able to do the same on remote server. As you can see, my hardware
limits me to use only raw TCP sockets. From what I understand, I'll need low-
level access to the server machine like IaaS. I tried
[pythonanywhere](https://www.pythonanywhere.com), but I guess they don't allow
simple python sockets. Heroku also requires you to write a web app, and I
don't know how to go about that or whether it'll work with my hardware.

What hosting/Cloud solution out there could act as above-mentioned socket
server and also as HTTP server which would later serve these files and
webpages.


Answer: If I understand your question correctly, you'd like to know which affordable
hosting solution would allow you to communicate via arbitrary TCP sockets.

The answer is simple: Pretty much any VPS (Virtual Private Server) company or
IaaS provider. Since you tagged your question with Amazon-EC2, yes they do
too, but the learning curve to get your first instance running and the
security groups (read: firewall rules, which live outside your VM) configured,
is rather steep. That said, you do have a so-called "Free Tier" there for one
year, which enables you to try out most of their services free-of-charge.

Other providers might be more suitable. (I'm not sure if it's allowed to
suggest providers here, but you could for example look at Linode or Rackspace
Cloud; they offer much less flexibility than EC2, but it's a whole lot easier
to get started.)

As with any IaaS option, it would be beneficial to know Linux, networking and
some security basics (at the very least) as you will be solely responsible for
the things you create.

Talking about security...

If that piece of code you posted has a similarly rudimentary receiving end,
you're setting yourself up for trouble as soon as it's out there in public, as
the communication is done in plain text [*] and doesn't seem to require any
kind of authentication. Anybody could probably telnet to the receiving end and
just inject some lines of text?

(That's exactly why considerably sane PaaS providers often don't let you
communicate over arbitrary ports and sockets :-) )

[*] I am guessing that, because you use readline. If any encryption was
involved, you'd likely write/read in chunks of bytes.

