2017-10-07 109 views
0

到目前爲止,該程序已經從客戶端發送消息到服務器並返回幾次。然而,當從客戶端輸入'200 Roll Dice'時,並且在服務器端處理,即產生列表。它不會將信息(列表)發送回客戶端。相反,它只是停止。Python Socket:輸入列表後服務器端沒有響應

例如:來自已連接的用戶:200卷骰子 [1,5,2,3,3] - 從此停止響應。我似乎無法確定問題。

下面的代碼片段:

def Main(): 
    host = "127.0.0.1" 
    port = 5010 

    mySocket = socket.socket() 
    mySocket.bind((host,port)) 

    mySocket.listen(3) 
    conn, addr = mySocket.accept() 
    print ("Connection from: " + str(addr)) 
    while True: 
     data = conn.recv(1024).decode() 
     if not data: 
             break 
     print ("from connected user: " + str(data)) 

     diceRoll = rollDice() # rollDice function produces a list of random numbers 


     if data == '200 Roll Dice': 
      dicedata = input(diceRoll) 
      conn.send(dicedata.encode()) 
     else: 
      data = input(" ? ") 
      conn.send(data.encode()) 


    conn.close() 

回答

1

的問題是在這裏:

if data == '200 Roll Dice': 
    dicedata = input(diceRoll) 
    conn.send(dicedata.encode()) 

你是顯示一個列表作爲提示文本,而不是將其發送回客戶端。 你應該做到以下幾點:

if data == '200 Roll Dice': 
    conn.send(str(diceRoll).encode()) 

這將發送列表(作爲)返回給客戶端。如果你想發送它作爲名單 - 你應該使用泡菜模塊。

0

input()在這個功能中完全沒用。它需要來自用戶的輸入和參數表是什麼控制檯展現給用戶講解什麼程序正在尋找,如下面的例子(蟒蛇控制檯上進行):

>>> name = input('Insert your name: ') 
Insert your name: Ezio 
>>> name 
'Ezio' 

假設參數,這將是發回給客戶端的是一個字符串「?」和rollDice()函數的結果,你應該這樣寫你的if-else語句:

ret = "" 
    if data == '200 Roll Dice': 
     ret = diceRoll 
    else: 
     ret = " ? " 
    conn.send(ret.encode()) 
:如果你聲明返回變量,而您也可以編輯自己的價值

if data == '200 Roll Dice': 
     dicedata = diceRoll 
     conn.send(dicedata.encode()) 
    else: 
     data = " ? " 
     conn.send(data.encode()) 

遠東更妙的是