2016-08-02 13 views
1

私はArduinoをサーバとしてセットアップしました。端子IN(I Macを使用する)、一つは、それに接続する出力を見て、次のように接続を閉じることができ:Pythonでtelnet接続からライブ出力を読む

> telnet HOST 
Trying 192.168.0.101... 
Connected to HOST. 
Escape character is '^]'. 
0 , 25486 , 0.00 : 
1 , 25754 , 0.00 : 
2 , 26054 , 0.00 : 
3 , 26320 , 0.00 : 
4 , 26642 , 0.00 : 
5 , 26912 , 0.00 : 
6 , 27187 , 0.00 : 
7 , 27452 , 0.00 : 
8 , 27774 , 0.00 : 
0 , 28068 , 2.72 : 
1 , 28389 , 2.72 : 
2 , 28695 , 2.72 : 
3 , 29002 , 2.72 : 
4 , 29272 , 2.72 : 
5 , 29537 , 2.72 : 
6 , 29806 , 2.72 : 
7 , 30112 , 2.72 : 
8 , 30389 , 2.72 : 
^] 
telnet> quit 
Connection closed. 

データは、現在、遅滞なく、毎秒約5行でストリーム。私はその後、telnetlibを使ってPythonスクリプトでこの接続を作り直そうとしました。

import telnetlib 
import time 

tn = telnetlib.Telnet(HOST) 
tn.set_debuglevel(1) 

while True: 
    tn_read = tn.read_very_eager() 
    time.sleep(1) 
    print repr(tn_read) 

このスクリプトは空の文字列のみを返します。そこにタイミングの問題があることを読んだので、私は手動の遅延を含んだ。私もtn.read_until(':')を試してみました。

マイ結果質問:

  1. 一度に一つのラインを引く方法はあります、着信ストリームと仮定すると、連続的かつ効果的に終わることはありませんでしょうか?
  2. これはPythonでどのように実装されていますか?

ありがとうございます。

EDIT: Arduinoコードにvoidループを追加しました。

void loop(void){ 
    // Handle any multicast DNS requests 
    mdns.update(); 

    // Handle a connected client. 
    Adafruit_CC3000_ClientRef client = senseServer.available(); 
    if (client) { 
     Serial.println("Connected"); 
    for(int i = 0; i < 9; i ++){ //sets number of channels 
     client.print(i); 
     client.print(" , "); 
     stamp = millis(); 
     client.print(stamp); 
     client.print(" , "); 
     client.print(R2); 
     client.println(" :"); 
     delay(10); 
    } 
    e = e + 1; 
    R2 = pow(2.718,e); 
    } 
} 
+0

arduinoのサーバーのコードはどのように見えますか? –

+0

質問を編集してコードを追加しました。 –

+0

Telnetは通常ポート23で提供されます。サーバーがポート23を使用していることを確認できますか?Adafruit_CC3000_Server senseServer(PORT);のような行を探します。 –

答えて

0

socket moduleを使用して下位レベルで作業できますか?

import socket 
s = socket.socket(
    socket.AF_INET, socket.SOCK_STREAM) 
s.connect(("192.168.0.101", 23)) 

while True: 
    data = str(s.recv(1024),encoding='utf-8') 
    print(data) 

なぜこの作業をする必要があります:あなたのサーバが(ログインなどを必要とする)完全なTelnetサーバが、接続を待ちソケットではないようですし、データを返します。

サーバは単なるソケットなので、単純なソケットでサーバに接続できます。これは上記のことです。私はこれを2つの方法でテストしました。最初にスターウォーズのtelnetサーバーをtowel.blinkenlights.nlにして、次に接続を待ってから毎秒1行のテキストを返す(サーバーをシミュレートする)単純なPythonサーバーを使用します。

+0

私はそのコードを試してみました。空の文字列などは表示されません。 –

関連する問題