Próbuję utworzyć program w Pythonie, który implementuje gniazda, każdy klient wysyła plik PDF, a serwer go otrzymuje, a tytuł zostaje zmieniony na "file_number.pdf" (np. Plik_1 .pdf). Przedstawiony problem polega na tym, że tylko klient może wysłać plik z powodzeniem. Gdy drugi klient próbuje wysłać program ulega awarii. Co robię źle i jak mogę rozwiązać mój kod, aby umożliwić N klientom (z N < 20) połączyć się z serwerem i przesyłać pliki?Wysyłanie pliku za pomocą gniazd w języku Python
Oto kod serwera:
import socket
import sys
s = socket.socket()
s.bind(("localhost",9999))
s.listen(10) # Acepta hasta 10 conexiones entrantes.
sc, address = s.accept()
print address
i=1
f = open('file_'+ str(i)+".pdf",'wb') # Open in binary
i=i+1
while (True):
# Recibimos y escribimos en el fichero
l = sc.recv(1024)
while (l):
f.write(l)
l = sc.recv(1024)
f.close()
sc.close()
s.close()
Oto kod klienta:
import socket
import sys
s = socket.socket()
s.connect(("localhost",9999))
f = open ("libroR.pdf", "rb")
l = f.read(1024)
while (l):
s.send(l)
l = f.read(1024)
s.close()
Aby uprościć mój kod zawsze używam książkę z nazwy pliku „libroR.pdf”, ale w pełnej kod jest wybierany przez graficzny interfejs użytkownika.
Pokaż nam błędy i powiedzieć nam, czy jest to klient lub serwer, który jest naruszona. – Marcin
@Marcin nie uczy mnie żadnych błędów, tylko pierwszy klient wysyła plik i kończy się pomyślnie, a serwer nadal czeka na więcej żądań, gdy drugi klient próbuje się połączyć, program kliencki po prostu nie robi nic i pozostaje w trybie gotowości. – franvergara66