Sending a file over TCP sockets in Python -
i've been able copy file contents (image) new file. when try same thing on tcp sockets i'm facing issues. server loop not exiting. client loop exits when reaches eof, server unable recognize eof.
here's code:
server
import socket # import socket module s = socket.socket() # create socket object host = socket.gethostname() # local machine name port = 12345 # reserve port service. s.bind((host, port)) # bind port f = open('torecv.png','wb') s.listen(5) # wait client connection. while true: c, addr = s.accept() # establish connection 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 connecting') c.close() # close connection
client
import socket # import socket module s = socket.socket() # create socket object host = socket.gethostname() # local machine name port = 12345 # reserve port 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 socket when done
here's screenshot:
server
client
edit 1: data copied over. making file "not complete." first column shows image has been received. seems larger 1 sent. because of this, i'm not able open image. seems corrupted file.
edit 2: how in console. file sizes same here.
client need notify finished sending, using socket.shutdown
(not socket.close
close both reading/writing part of socket):
... print "done sending" s.shutdown(socket.shut_wr) print s.recv(1024) s.close()
update
client sends hello server!
server; written file in server side.
s.send("hello server!")
remove above line avoid it.
Comments
Post a Comment