web-dev-qa-db-fra.com

Quelle est la valeur de retour de Socket.accept () dans python

J'ai fait un serveur simple et un client simple avec le module socket en python.

serveur:

# 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()

et client:

#client.py
import socket

s = socket.socket()

Host = socket.socket()
port = 1234

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

J'ai démarré le serveur, puis démarré 4 clients et obtenu la sortie dans la console du serveur comme ci-dessous:

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)

quelle est la deuxième partie du tuple?

20
imsrch

Depuis la documentation socket :

Une paire (Host, port) est utilisée pour la famille d'adresses AF_INET, où Host est une chaîne représentant soit un nom d'hôte en notation de domaine Internet comme 'daring.cwi.nl' ou une adresse IPv4 comme '100.50.200.5', et le port est un nombre entier.

La deuxième valeur est donc le numéro de port utilisé par le côté client pour la connexion. Lorsqu'une connexion TCP/IP est établie, le client choisit un numéro de port sortant pour communiquer avec le serveur; les paquets de retour du serveur doivent être adressés à ce numéro de port.

16
Martijn Pieters

Citation de documentation python :

socket.accept()

Acceptez une connexion. Le socket doit être lié à une adresse et à l'écoute des connexions. La valeur de retour est une paire (conn, address) où conn est un nouvel objet socket utilisable pour envoyer et recevoir des données sur la connexion, et address est l'adresse liée à la socket à l'autre extrémité de la connexion.

Ce que address est vous pouvez trouver dans le même doc à partir des mots "Les adresses de socket sont représentées comme suit" .

11
Alexey Kachayev