2017-10-07 12 views
0

これまでのところ、このプログラムはクライアントからサーバーにメッセージを送信していました。しかし、クライアント側から「200ロールダイス」が入力され、サーバ側で処理され、すなわちリストが生成される。情報(リスト)をクライアントに送り返すことはありません。代わりにそれはちょうど停止します。Pythonソケット:リストの入力後にサーバー側が応答しない

例:接続したユーザー:ロールダイス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()は、この機能ではまったく役に立たない。これは、ユーザからの入力を必要とし、引数は、ユーザへのコンソールショープログラムは、以下の例のように(Pythonのコンソール上で実行)、探しているものを説明するものです。

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

をパラメータがされることと仮定すると、文字列 "?"がクライアントに返されます。そしてrollDice()関数の結果、あなたはこのようなあなたのif-else文を書く必要があります:あなたは戻り変数を宣言すると、あなたも彼の値を編集した場合

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

は極東でも良いだろう。

ret = "" 
    if data == '200 Roll Dice': 
     ret = diceRoll 
    else: 
     ret = " ? " 
    conn.send(ret.encode()) 
関連する問題