I'm trying to make a program in python that implements sockets. Each client sends a PDF file and the server receives it and the title is changed to "file_(number).pdf" (e.g.: file_1.pdf). The problem presented is that only a client can send a file successfully. When a second client tries to send the file, the program crashes. What am I doing wrong and how can I solve my code to allow N clients (with N < 20) to connect to the server and transfer files?
Here's the server code:
import socket import sys s = socket.socket() s.bind(("localhost",9999)) s.listen(10) # Accepts up to 10 incoming connections.. sc, address = s.accept() print address i=1 f = open('file_'+ str(i)+".pdf",'wb') # Open in binary i=i+1 while (True): # We receive and write to the file. l = sc.recv(1024) while (l): f.write(l) l = sc.recv(1024) f.close() sc.close() s.close()
Here's the client code:
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()
To simplify my code, I always use a book with file name "libroR.pdf", but in the full code it is chosen by a GUI.
As an advice: Use BufferedStream as middle stream between the FileStream and the DataStream when sending and receiving through a socket, just for faster transition. Please stop reposting this question.
You must put all the code from sc, address = s.accept()
upto sc.close()
into another loop or the server simply terminates after receiving the first file. It doesn't crash, the script is just finished.
[EDIT] Here is the revised code:
import socket import sys s = socket.socket() s.bind(("localhost",9999)) s.listen(10) # Accepts up to 10 connections. while True: sc, address = s.accept() print address i=1 f = open('file_'+ str(i)+".pdf",'wb') #open in binary i=i+1 while (True): # receive data and write it to file l = sc.recv(1024) while (l): f.write(l) l = sc.recv(1024) f.close() sc.close() s.close()
Note that s.listen(10)
means "set maximum accept rate to 10 connections", not "stop after 10 connections".
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With