Mam trochę problemów z gniazdami w Pythonie. Za każdym razem, gdy ktoś się połączy, działa dobrze, ale jeśli się rozłączą, program serwera zostanie zamknięty. Chcę, aby program serwera pozostawał otwarty po zamknięciu klienta. Używam pętli True, aby utrzymać połączenie przy życiu, ale gdy klient zamknie połączenie, serwer zamknie jego połączenie.Gniazda Pythona - utrzymują gniazdo przy życiu?
Oto klient:
import socket, sys
conn = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
host = sys.argv[1]
port = int(sys.argv[2])
conn.connect((host, port))
print("Connected to host " + sys.argv[1])
td = 1
while td == 1:
msg = raw_input('MSG: ')
Oto server:
import socket, sys
socket.setdefaulttimeout(150)
host = ''
port = 50005
socksize = 1024
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((host, port))
print("Server started on port: %s" % port)
s.listen(1)
print("Now listening...\n")
conn, addr = s.accept()
while True:
print 'New connection from %s:%d' % (addr[0], addr[1])
data = conn.recv(socksize)
if not data:
break
elif data == 'killsrv':
conn.close()
sys.exit()
else:
print(data)
Czy używasz n + 1 gniazd dla n połączeń? Potrzebujesz jednego gniazda, które nasłuchuje przez cały czas. To gniazdo nasłuchu akceptuje nowe połączenia i otwiera kolejne gniazdo za każdym razem, gdy żądane jest połączenie. – Penang
Czy możesz wysłać krótki fragment kodu, aby zademonstrować problem? – SimonJ
n + 1 gniazdka? Nie jestem pewien, czy podążam. Czy możesz wyjaśnić nieco więcej? – AustinM