2012-09-17 7 views
15

Ich habe einen einfachen Server und einen einfachen Client mit socket-Modul in Python.Was ist der Rückgabewert von Socket.accept() in Python

Server:

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

und Client:

#client.py 
import socket 

s = socket.socket() 

host = socket.socket() 
port = 1234 

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

ich den Server gestartet und begann dann vier Kunden und bekam Ausgabe in der Konsole des Servers wie folgt:

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) 

was der zweite Teil im Tupel?

Antwort

13

Vom :

Paar (Host, Port) für die AF_INET Adressfamilie verwendet, wobei Host eine Zeichenfolge ist, die entweder einen Host-Namen in Internet-Domain-Notation wie 'daring.cwi.nl' oder eine IPv4-Adresse wie '100.50.200.5', und Port ist eine Ganzzahl.

Also der zweite Wert ist die Port-Nummer, die von der Client-Seite für die Verbindung verwendet wird. Wenn eine TCP/IP-Verbindung hergestellt wird, wählt der Client eine ausgehende Portnummer aus, um mit dem Server zu kommunizieren. Die Server Return-Pakete sollen an diese Portnummer adressiert werden.

+1

Wie kann ich nur den Port-Zahl Integer-Wert aus dem (Host, Port) -Paar erhalten, die accept() zurückgibt? –

+1

Es ist nur ein Tupel; Verwenden Sie das Abonnement: 'returned_tuple [1]' –

5

Zitat von python documentation:

socket.accept()

eine Verbindung übernehmen. Der Socket muss an eine Adresse gebunden sein und auf Verbindungen warten. Der Rückgabewert ist ein Paar (conn, address), wobei Conn ein neues Socket-Objekt ist, das zum Senden und Empfangen von Daten über die Verbindung verwendet werden kann, und Adresse die Adresse ist, die an den Socket am anderen Ende der Verbindung gebunden ist.

Was address ist, können Sie in demselben Dokument from words "Socket addresses are represented as follows" finden.

+0

Warum ist das heruntergeregelt ?? Dies ist genau das, was gefragt wurde, und zum Glück, was ich gesucht habe. –

Verwandte Themen