2014-11-22 69 views
0

我有硬件连接到任何给定的IP和端口组合上的原始TCP套接字。然后它不断发送字符。下面的一段Python代码可以让你了解硬件的功能。原生TCP侦听云或Web服务器上的套接字

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服务器,稍后将服务于这些文件和网页。

+0

如果您的建议服务器可以运行我已经编写好的Python Socket服务器,那将是理想的选择。 – Ics 2014-11-22 19:20:07

+1

PythonAnywhere dev这里,只是为了确认OP是否正确,我们不支持任意套接字服务器。 (还?) – hwjp 2014-11-24 13:13:12

回答

1

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

答案很简单:几乎任何VPS(虚拟专用服务器)公司或IaaS提供商。由于您使用Amazon-EC2标记了您的问题,因此他们也这样做了,但您的第一个实例运行的学习曲线以及配置的安全组(读取:位于虚拟机外的防火墙规则)相当陡峭。也就是说,您在那里有一年所谓的“免费套餐”,这使您可以免费试用大部分服务。

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

As使用任何IaaS选项,知道Linux,网络和一些安全基础知识(至少)会是有益的,因为您将为您创建的内容全权负责。

谈论安全...

如果你张贴的代码有一个类似的初步接收端,你只要它在公众那里,作为通信完成自己设置的麻烦在纯文本[*],似乎并不需要任何形式的认证。任何人都可以telnet到接收端,只是注入一些文本行?

(这正是为什么相当理智的PaaS供应商通常不会让你沟通过任意端口和插槽:-))

[*]我猜测,因为你使用输入行。如果涉及任何加密,你可能会写入/读取字节块。

+0

谢谢你的回答。尝试EC2似乎是一个有吸引力的选择,但我对此不甚了解。我可以将它配置为任何linux-ubuntu服务器吗?至少,我需要一个稳定的IP地址和打开端口的权限。 – Ics 2014-11-22 19:04:59

+0

关于安全性:正如我所提到的,实际数据(字符流)将由嵌入式硬件模块发送,因此不需要加密。我的套接字服务器与每个请求者分开连接。你确定任何人都可以简单地通过telnet添加文本到我已经建立的连接?另外,所发送的数据是公开的,因此任何人都可以点击并收听。 – Ics 2014-11-22 19:08:59

+0

@Ics是的,你可以使用EC2实例在其上运行Ubuntu。只要实例正在运行,IP就会保持分配状态。他们对你如何使用他们的基础设施几乎没有任何限制。每个默认安全组都被锁定,但您可以轻松打开它们以满足您的喜好。话虽如此,如果你有一个客户端的静态IP地址,这些安全组可以派上用场来处理我提到的安全问题(无可否认,这些猜测来源于代码片段:)) – sysconfig 2014-11-22 19:40:20