原始TCP侦听云或Web服务器上的套接字

时间:2014-11-22 12:04:56

标签: python sockets heroku tcp amazon-ec2

我有硬件连接到任何给定IP和端口组合的原始TCP套接字。然后它不断发送字符。下面的Python代码可以让您了解硬件的功能。

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()

运行此代码时,它的行为与我的硬件系统完全相同。 send-data.txt文件包含与硬件发送的字符类似的字符。

我使用SocketServer库在Python中编写了一个套接字服务器。它允许连接,接收字符流,并将其存储到本地(新创建的)文件中。目前,我正在我的系统上运行此代码,如localhost,它可以工作。我想通过网页提供这些文件。

我希望能够在远程服务器上执行相同的操作。如您所见,我的硬件限制我只使用原始TCP套接字。据我所知,我需要对IaaS等服务器机器进行低级访问。我试过pythonanywhere,但我猜他们不允许使用简单的python套接字。 Heroku还要求你编写一个Web应用程序,我不知道该怎么做或者它是否适用于我的硬件。

哪些托管/云解决方案可以充当上述套接字服务器,也可以作为HTTP服务器,以后可以提供这些文件和网页。

1 个答案:

答案 0 :(得分:1)

如果我正确理解您的问题,您想知道哪种经济实惠的托管解决方案可以让您通过任意TCP套接字进行通信。

答案很简单:几乎所有VPS(虚拟专用服务器)公司或IaaS提供商。由于您使用Amazon-EC2标记了您的问题,是的,他们也这样做了,但是为了让您的第一个实例运行的学习曲线和配置的安全组(读取:位于VM外部的防火墙规则)相当陡峭。也就是说,你确实有一个所谓的" Free Tier"有一年的时间,这使您可以免费试用他们的大部分服务。

其他提供商可能更合适。 (我不确定它是否允许在这里建议提供商,但你可以看看Linode或Rackspace Cloud;它们提供的灵活性比EC2低得多,但它更容易开始吧。)

与任何IaaS选项一样,了解Linux,网络和一些安全基础(至少)是有益的,因为您将对您创建的内容负全部责任。

谈论安全......

如果您发布的那段代码有一个类似的基本接收端,那么一旦公开发布,您就会自行设置麻烦,因为通信是以纯文本形式进行的[*并且似乎不需要任何形式的身份验证。任何人都可以telnet到接收端,只是注入一些文本行?

(这正是为什么相当理智的PaaS提供商通常不会让你通过任意端口和套接字进行通信的原因:-))

[*]我猜这是因为你使用了readline。如果涉及任何加密,您可能会以字节块的形式进行写入/读取。