2014-11-22 86 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