2016-09-16 9 views
0

キーボード入力によるテキストの入力を求められた後にデータを送信しようとしています。コードは機能しているようですが、プロンプトは表示されません。誰かがなぜ示唆できますか?ソケットを介してデータを送受信するpython3

コードを送信するためには、次のとおりです。受信する

#!/usr/bin/python3 
    import socket 
    class LogSocket: 
    def __init__(self, socket): 
     self.socket = socket 

    def send(self, data): 
     print("Sending {0} to {1}".format(data, self.socket.getpeername()[0])) 
     self.socket.send(data) 

    def close(self): 
     self.socket.close() 

    def respond(client): 
    response = input("Enter a value: ") 
    client.send(bytes(response, 'utf8')) 
    client.close() 

    if __name__ == "__main__": 
    server = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
    server.bind(('localhost',2401)) 
    server.listen(1) 
    try: 
     while True: 
     client, addr = server.accept() 
     respond(LogSocket(client)) 
    finally: 
     server.close() 

コード:

#!/usr/bin/python3 
import socket 
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
client.connect(('localhost', 2401)) 
print("Received: {0}".format(client.recv(1024))) 
client.close() 

行動は少し奇妙です。送信端末に「Hello World」と入力して入力すると、受信端末に切り替えて受信スクリプトを実行すると、出力はありません。 "Hello World"と入力して送信者にenterキーを押すと、受信スクリプトを再実行し、 "Hello World"が表示されますが、入力のプロンプトが表示されます。

差出人出力:

Hello World 
Enter a value: Sending b'' to 127.0.0.1 
Hello World 
Enter a value: Sending b'Hello World' to 127.0.0.1 

レシーバ出力:

$ ./receive_data_socket1.py 
Received: b'' 
$ ./receive_data_socket1.py 
Received: b'Hello World' 

のpython3にソケットを扱うの経験を持つ誰もが行動を説明してもらえますか?私は動作が3.5で変更されていることを認識しています。これは私が使用しているものです。

答えて

0

サーバーを実行すると、クライアントが接続されるまで、server.accept()コール内でブロックされます。つまり、クライアントが接続されるまで、次のコード行は実行されません。次の行、入力プロンプトをトリガーするのはrespond(...)関数にのみあります。

一つのタブ

  • スタート
  • がサーバに戻る別のタブ内のクライアントにこの

    1. スタートにサーバーを試してみてください - あなたが見るべきプロンプト今

    ます」もう1つのオプションは、acceptの前に入力プロンプトを実行し、それを変数に格納することです。その変数を使用してrespondと電話してください - ここにはスニペットがあります

    #!/usr/bin/python3 
    import socket 
    class LogSocket: 
        def __init__(self, socket): 
         self.socket = socket 
    
        def send(self, data): 
         print("Sending {0} to {1}".format(data, self.socket.getpeername()[0])) 
         self.socket.send(data) 
    
        def close(self): 
         self.socket.close() 
    
    def respond(client, response): 
        client.send(bytes(response, 'utf8')) 
        client.close() 
    
    if __name__ == "__main__": 
        server = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
        server.bind(('localhost',2401)) 
        server.listen(1) 
        try: 
         while True: 
          response = input("Enter a value: ") 
          client, addr = server.accept() 
          respond(LogSocket(client), response) 
        finally: 
         server.close() 
    
  • 関連する問題