2012-12-19 64 views
1

我對套接字編程完全陌生。 我有一個產品並嘗試連接。 我可以發送數據並在產品上查看其結果,但我無法收到任何內容。 這是我的腳本:客戶端/服務器在Python中未接收數據

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。 我甚至不確定在我的腳本中服務器和客戶端是否正確! 請幫我解決它。

+0

如果將發送和接收分成兩個進程,您可能會有更多樂趣。 – Marcin

+0

我編輯我的腳本如下: 但仍然沒有收到任何東西,把服務器(模塊名稱)後.ScktRecv(),返回我這個錯誤: >>>導入服務器 >>> Server.ScktConn() 頻率( 450-2500):600 的recv:0 ace_set_frequency C1 600 >>> Server.ScktRec() 回溯(最近通話最後一個): 文件 「」,1號線,在 Server.ScktRec( ) AttributeError:'模塊'對象沒有屬性'ScktRec' – Sonic

+0

'ScktRec'看起來像你犯了一個錯字(應該是'ScktRecv') – cmh

回答

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) 
+0

感謝您的回覆 – Sonic

+0

我編輯我的腳本如下: – Sonic

+1

這是否解決您的問題?如果有,可隨時標記這個答案已被接受,否則會提供進一步的信息 – cmh

相關問題