web-dev-qa-db-ja.com

pythonのSocket.accept()の戻り値は何ですか

Pythonでsocketモジュールを使用して単純なサーバーと単純なクライアントを作成しました。

サーバ:

# server.py
import socket

s = socket.socket()
Host = socket.gethostname()
port = 1234
s.bind((Host, port))

s.listen(5)

while True:
    c, addr = s.accept()
    print 'Got connection from', addr
    c.send('Thank you for your connecting')
    c.close()

およびクライアント:

#client.py
import socket

s = socket.socket()

Host = socket.socket()
port = 1234

s.connect((Host, port))
print s.recv(1024)

サーバーを起動してから4つのクライアントを起動し、サーバーのコンソールに次のように出力しました。

Got connection from ('192.168.0.99', 49170)
Got connection from ('192.168.0.99', 49171)
Got connection from ('192.168.0.99', 49172)
Got connection from ('192.168.0.99', 49173)

タプルの2番目の部分は何ですか?

20
imsrch

socketドキュメント から:

ペア(ホスト、ポート)は、AF_INETアドレスファミリに使用されます。ホストは、「daring.cwi.nl」などのインターネットドメイン表記のホスト名または「100.50.200.5」などのIPv4アドレスを表す文字列で、ポートは整数。

したがって、2番目の値は、クライアント側が接続に使用するポート番号です。 TCP/IP接続が確立されると、クライアントはサーバーと通信するための発信ポート番号を選択します。サーバーの返信パケットは、そのポート番号にアドレス指定されます。

16
Martijn Pieters

pythonドキュメント からの引用:

socket.accept()

接続を受け入れます。ソケットはアドレスにバインドされ、接続を待機する必要があります。戻り値は(conn, address)のペアです。ここで、connは接続でデータを送受信するために使用できる新しいソケットオブジェクトで、addressは接続の反対側のソケットにバインドされたアドレスです。

同じドキュメントでaddressとは何か 「ソケットアドレスは次のように表される」という言葉から

11
Alexey Kachayev