1

私はソケットプログラミングにまったく慣れていません。製品があり、接続しようとしています。データを送信し、その結果を製品で確認できますが、何も受信できません。これは私のスクリプトです:

import socket
def ScktConn():
 s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
 s.connect(('127.0.0.1', 5006))
# 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)
# so far I sent a tcl command to product to set the frequency and it works
 s.send('0 ace_azplayer_remove_player XXX \r\n')
# sending another tcl command and works
 s.send('0 ace_azplayer_add_player \r\n')
# here it is working too
 s.send('0 ace_azplayer_add_ace XXX C1\r\n')
 Path='C:/Users/AM_RJ/Desktop/gridview_script/PBF/4x4U_wocorr_SNR.csv'
 s.send('0 ace_azplayer_load_csvfile AzPlayer1 '+Path+' \r\n')
# here I should receive some numbers, but always returning me 0!
#even if I send ('hello!') and use recv(1024), it returns 0!
 csvid=s.recv(4096)
 print csvid
 Path2='0 ace_azplayer_edit_playback_file AzPlayer1 '+str(csvid)+' -linkConfiguration "4x4" \r\n'
 print Path2
 s.send(Path2)

を使用した後recv(4096)、いくつかの番号を受け取る必要がありますが、常に返されます0! 送っ('hello!')て使っrecv(1024)ても返ってくる0!私はpython 2.7を使用しています。私のスクリプトでサーバー側とクライアント側が正しいかどうかさえわかりません! それについて私を助けてください。

4

1 に答える 1

3

複数のソケットが必要です。これは最小限の例です (堅牢にするためには、さらに多くの作業が必要になります)。ScktConn は、 からの接続をリッスンするサーバー ソケットを作成する新しいスレッドを生成しますs

import socket
import threading
import time

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

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)
于 2012-12-19T17:10:11.083 に答える