1

私たちの製品に接続し、tcl コマンド (周波数の設定など) を送信する予定の次のスクリプトがありますが、次のように表示されます。

サーバーのインポート

Server.ScktConn()

周波数 (450-2500): 600

recv: 0 ace_set_frequency C1 600

これは最初のコマンドですが、頻度を設定することすらできません (cmd を表示するだけで、適用はしません)。

ここにスクリプトがあります:

import socket
import threading
import time

address = ('127.0.0.1', 5426)
def ScktRecv():
    r = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    r.bind(address)
    r.listen(5)
    conn, _ = r.accept()
    csvid = conn.recv(4096)
    print "recv: %s" % csvid
    conn.close()

def ScktConn():
    recv_thread = threading.Thread(target=ScktRecv)
    recv_thread.start()
    time.sleep(1)
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    s.connect(address)
    # our local IP is 192.168.2.1, but it works even with 127.0.0.1, I don't know from where       #it is coming
    Freq=raw_input('Frequency(450-2500): ')
    CmdF='0 ace_set_frequency C1 '+str(Freq)+' \r\n'
    s.send(CmdF)
    s.send('0 ace_azplayer_remove_player AzPlayer1 \r\n')
    s.send('0 ace_azplayer_add_player \r\n')
    s.send('0 ace_azplayer_add_ace AzPlayer1 C1\r\n')
    Path='C:/Users/amir_rajaee/Desktop/gridview_script/PBF/4x4U_wocorr_SNR.csv'
    s.send('0 ace_azplayer_load_csvfile AzPlayer1 '+Path+' \r\n')
    s.close()

しかし、次のスクリプトを使用すると、周波数が設定されますが、私の問題は受信機がないことです。最後のコマンド (csv ファイルをロード) の出力が必要です!:

import socket
def ScktConn():
 s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
 s.connect(('127.0.0.1', 5006))
 Freq=raw_input('Frequency(450-2500): ')
 CmdF='0 ace_set_frequency C1 '+str(Freq)+' \r\n'
 s.send(CmdF)
 s.send('0 ace_azplayer_remove_player AzPlayer1 \r\n')
 s.send('0 ace_azplayer_add_player \r\n')
 s.send('0 ace_azplayer_add_ace AzPlayer1 C1\r\n')
 Path='C:/Users/amir_rajaee/Desktop/gridview_script/PBF/4x4U_wocorr_SNR.csv'
 s.send('0 ace_azplayer_load_csvfile AzPlayer1 '+Path+' \r\n')
4

1 に答える 1

1

ここには2つの問題があるようです。

1) Tcl コマンドを印刷すると、それらが実行されると予想されます。そうではありません。これを達成する方法については、サブプロセス ライブラリを参照してください。

2) 電話socket.recvは一度だけ。すべての送信をキャプチャするには、受信者が送信されたメッセージを継続的にリッスンする必要があります。変更SockRecv:

address = ('127.0.0.1', 5426)
def ScktRecv():
    r = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    r.bind(address)
    r.listen(5)
    conn, _ = r.accept()
    while True:
        csvid = conn.recv(4096)
        if csvid:
            print "%s" % csvid
    conn.close()

スレッドのライフサイクルを適切に処理するには、さらに修正を加える必要があります。

于 2012-12-20T15:43:00.973 に答える