Я успешно смог скопировать содержимое файла (изображение) в новый файл. Однако, когда я пытаюсь сделать то же самое по TCP-сокетам, я сталкиваюсь с проблемами. Цикл сервера не завершается. Клиентский цикл выходит, когда он достигает EOF, однако сервер не может распознать EOF.
Здесь код:
Сервер
import socket # Import socket module
s = socket.socket() # Create a socket object
host = socket.gethostname() # Get local machine name
port = 12345 # Reserve a port for your service.
s.bind((host, port)) # Bind to the port
f = open('torecv.png','wb')
s.listen(5) # Now wait for client connection.
while True:
c, addr = s.accept() # Establish connection with client.
print 'Got connection from', addr
print "Receiving..."
l = c.recv(1024)
while (l):
print "Receiving..."
f.write(l)
l = c.recv(1024)
f.close()
print "Done Receiving"
c.send('Thank you for connecting')
c.close() # Close the connection
Client
import socket # Import socket module
s = socket.socket() # Create a socket object
host = socket.gethostname() # Get local machine name
port = 12345 # Reserve a port for your service.
s.connect((host, port))
s.send("Hello server!")
f = open('tosend.png','rb')
print 'Sending...'
l = f.read(1024)
while (l):
print 'Sending...'
s.send(l)
l = f.read(1024)
f.close()
print "Done Sending"
print s.recv(1024)
s.close # Close the socket when done
Вот скриншот:
Сервер
Client
Изменить 1: дополнительные данные скопированы. Сделать файл "не полным". В первом столбце показано изображение, которое было получено. Кажется, он больше, чем тот, который был отправлен. Из-за этого я не могу открыть изображение. Это похоже на поврежденный файл.
Изменить 2: Вот как я это делаю в консоли. Размеры файлов здесь одинаковы.