File transfer on network

M

mukesh tiwari

Hello all
Currently i am trying to develop a client and server in python. Client
takes screenshot in every 20 seconds and send it to server. Server
store the received file in folder. Here is code for Client

import sys
import socket
import gtk.gdk
import time
if __name__ == "__main__":
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);
host,port="localhost",50007
s.connect((host,port))
while 1:
w = gtk.gdk.get_default_root_window()
sz = w.get_size()
pb = gtk.gdk.Pixbuf(gtk.gdk.COLORSPACE_RGB,False,8,sz[0],sz[1])
pb = pb.get_from_drawable(w,w.get_colormap(),0,0,0,0,sz[0],sz[1])
if (pb != None):
pb.save('/home/tmp_1/screenshot.png',"png")
f=open('/home//tmp_1/screenshot.png','rb')
while 1:
blk=f.read(2048)
if not blk:break
s.send(blk)
f.close()
print 'file transfer done';
time.sleep(20)

s.close()


Server Code
import sys
import socket
import time
if __name__ == "__main__":

s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
host,port="",50007
s.bind((host,port))
s.listen(1)
conn,add=s.accept()
i=0
while 1:
f=open('/home/tmp_2/copyscreenshot_'+str(i)+'.png','wb')
while 1:
data=conn.recv(2048)
if not data:break
f.write(data)

f.close()
print 'file received'
time.sleep(20)
i+=1;
#print ' file received '

conn.close()


My problem is that server is copying only first image
copyscreenshot_0.png while my client continuously taking screen shot.
Kindly tell me what is wrong with my server code.

Thank you
Mukesh Tiwari







































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































import sys
import socket
import gtk.gdk
import time
if __name__ == "__main__":
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);
host,port="localhost",50007
s.connect((host,port))
while 1:
w = gtk.gdk.get_default_root_window()
sz = w.get_size()
pb = gtk.gdk.Pixbuf(gtk.gdk.COLORSPACE_RGB,False,
8,sz[0],sz[1])
pb = pb.get_from_drawable(w,w.get_colormap(),
0,0,0,0,sz[0],sz[1])
if (pb != None):
pb.save('/home/user/Programs/Mukesh_Tiwari/
python/tmp_1/screenshot.png',"png")
f=open('/home/user/Programs/Mukesh_Tiwari/python/tmp_1/
screenshot.png','rb')
while 1:
blk=f.read(2048)
if not blk:break
s.send(blk)
f.close()
print 'file transfer done';
time.sleep(20)

s.close()
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
"client.py" 25L,
715C
7,2-9 All
 
M

mukesh tiwari

Kindly see this post as above post contains some garbage code in end.
Sorry for that.

Hello all
Currently i am trying to develop a client and server in python.
Client
takes screenshot in every 20 seconds and send it to server. Server
store the received file in folder. Here is code for Client
import sys
import socket
import gtk.gdk
import time
if __name__ == "__main__":
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);
host,port="localhost",50007
s.connect((host,port))
while 1:
w = gtk.gdk.get_default_root_window()
sz = w.get_size()
pb = gtk.gdk.Pixbuf(gtk.gdk.COLORSPACE_RGB,False,
8,sz[0],sz[1])
pb = pb.get_from_drawable(w,w.get_colormap(),
0,0,0,0,sz[0],sz[1])
if (pb != None):
pb.save('/home/tmp_1/screenshot.png',"png")
f=open('/home//tmp_1/screenshot.png','rb')
while 1:
blk=f.read(2048)
if not blk:break
s.send(blk)
f.close()
print 'file transfer done';
time.sleep(20)
s.close()
Server Code
import sys
import socket
import time
if __name__ == "__main__":
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
host,port="",50007
s.bind((host,port))
s.listen(1)
conn,add=s.accept()
i=0
while 1:
f=open('/home/tmp_2/copyscreenshot_'+str(i)
+'.png','wb')
while 1:
data=conn.recv(2048)
if not data:break
f.write(data)
f.close()
print 'file received'
time.sleep(20)
i+=1;
#print ' file received '
conn.close()
My problem is that server is copying only first image
copyscreenshot_0.png while my client continuously taking screen shot.
Kindly tell me what is wrong with my server code.
Thank you
Mukesh Tiwari
 
M

MRAB

mukesh said:
Hello all
Currently i am trying to develop a client and server in python. Client
takes screenshot in every 20 seconds and send it to server. Server
store the received file in folder. Here is code for Client

import sys
import socket
import gtk.gdk
import time
if __name__ == "__main__":
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);
host,port="localhost",50007
s.connect((host,port))
while 1:
w = gtk.gdk.get_default_root_window()
sz = w.get_size()
pb = gtk.gdk.Pixbuf(gtk.gdk.COLORSPACE_RGB,False,8,sz[0],sz[1])
pb = pb.get_from_drawable(w,w.get_colormap(),0,0,0,0,sz[0],sz[1])
if (pb != None):
pb.save('/home/tmp_1/screenshot.png',"png")
f=open('/home//tmp_1/screenshot.png','rb')
while 1:
blk=f.read(2048)
if not blk:break
s.send(blk)
f.close()
print 'file transfer done';
time.sleep(20)

s.close()


Server Code
import sys
import socket
import time
if __name__ == "__main__":

s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
host,port="",50007
s.bind((host,port))
s.listen(1)
conn,add=s.accept()
i=0
while 1:
f=open('/home/tmp_2/copyscreenshot_'+str(i)+'.png','wb')
while 1:
data=conn.recv(2048)
if not data:break
f.write(data)

f.close()
print 'file received'
time.sleep(20)
i+=1;
#print ' file received '

conn.close()


My problem is that server is copying only first image
copyscreenshot_0.png while my client continuously taking screen shot.
Kindly tell me what is wrong with my server code.
The .recv will return an empty string only when the connection is closed
by the client, but the client keeps the connection open.

You could either open and close a connection for each image, or have the
client tell the server how many bytes it's going to send, followed by
the bytes (my preference would be to send the size as a string ending
with, say, a newline).

Another point: the .send method doesn't guarantee that it'll send all
the bytes (it'll return the number of bytes that it has actually sent);
use the .sendall method instead.
 
M

mukesh tiwari

mukesh said:
Hello all
Currently i am trying to develop a client and server in python. Client
takes screenshot in every 20 seconds and send it to server. Server
store the received file in folder. Here is code for Client
import sys
import socket
import gtk.gdk
import time
if __name__ == "__main__":
   s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);
   host,port="localhost",50007
   s.connect((host,port))
   while 1:
           w = gtk.gdk.get_default_root_window()
           sz = w.get_size()
           pb = gtk.gdk.Pixbuf(gtk.gdk.COLORSPACE_RGB,False,8,sz[0],sz[1])
           pb = pb.get_from_drawable(w,w.get_colormap(),0,0,0,0,sz[0],sz[1])
           if (pb != None):
                       pb.save('/home/tmp_1/screenshot.png',"png")
           f=open('/home//tmp_1/screenshot.png','rb')
           while 1:
                   blk=f.read(2048)
                   if not blk:break
                   s.send(blk)
           f.close()
           print 'file transfer done';
           time.sleep(20)
   s.close()
Server Code
import sys
import socket
import time
if __name__ == "__main__":
   s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
   host,port="",50007
   s.bind((host,port))
   s.listen(1)
      conn,add=s.accept()
   i=0
   while 1:
           f=open('/home/tmp_2/copyscreenshot_'+str(i)+'.png','wb')
           while 1:
                   data=conn.recv(2048)
                   if not data:break
                   f.write(data)
           f.close()
           print 'file received'
           time.sleep(20)
           i+=1;
   #print ' file received '
   conn.close()
My problem is that server is copying only first image
copyscreenshot_0.png while my client continuously taking screen shot.
Kindly tell me what is wrong with my server code.

The .recv will return an empty string only when the connection is closed
by the client, but the client keeps the connection open.

You could either open and close a connection for each image, or have the
client tell the server how many bytes it's going to send, followed by
the bytes (my preference would be to send the size as a string ending
with, say, a newline).

Another point: the .send method doesn't guarantee that it'll send all
the bytes (it'll return the number of bytes that it has actually sent);
use the .sendall method instead.

Thank you MARB. I used your first idea and opening and closing
connection for each image. Just wanted to know if i have to take
pictures at small intervals , this method is efficient or not? It
would be great if you can provide a bit code for second method.
Keeping the connection open but how to know that this is end a
particular image and save it.
 
M

MRAB

mukesh said:
mukesh said:
Hello all
Currently i am trying to develop a client and server in python. Client
takes screenshot in every 20 seconds and send it to server. Server
store the received file in folder. Here is code for Client
import sys
import socket
import gtk.gdk
import time
if __name__ == "__main__":
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);
host,port="localhost",50007
s.connect((host,port))
while 1:
w = gtk.gdk.get_default_root_window()
sz = w.get_size()
pb = gtk.gdk.Pixbuf(gtk.gdk.COLORSPACE_RGB,False,8,sz[0],sz[1])
pb = pb.get_from_drawable(w,w.get_colormap(),0,0,0,0,sz[0],sz[1])
if (pb != None):
pb.save('/home/tmp_1/screenshot.png',"png")
f=open('/home//tmp_1/screenshot.png','rb')
while 1:
blk=f.read(2048)
if not blk:break
s.send(blk)
f.close()
print 'file transfer done';
time.sleep(20)
s.close()
Server Code
import sys
import socket
import time
if __name__ == "__main__":
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
host,port="",50007
s.bind((host,port))
s.listen(1)
conn,add=s.accept()
i=0
while 1:
f=open('/home/tmp_2/copyscreenshot_'+str(i)+'.png','wb')
while 1:
data=conn.recv(2048)
if not data:break
f.write(data)
f.close()
print 'file received'
time.sleep(20)
i+=1;
#print ' file received '
conn.close()
My problem is that server is copying only first image
copyscreenshot_0.png while my client continuously taking screen shot.
Kindly tell me what is wrong with my server code.
The .recv will return an empty string only when the connection is closed
by the client, but the client keeps the connection open.

You could either open and close a connection for each image, or have the
client tell the server how many bytes it's going to send, followed by
the bytes (my preference would be to send the size as a string ending
with, say, a newline).

Another point: the .send method doesn't guarantee that it'll send all
the bytes (it'll return the number of bytes that it has actually sent);
use the .sendall method instead.

Thank you MARB. I used your first idea and opening and closing
connection for each image. Just wanted to know if i have to take
pictures at small intervals , this method is efficient or not?

Creating a new connection every 20 seconds should be OK. For much
smaller intervals you would need to test it yourself. The minimum
interval depends on how often you're sending data and you're sending
each time, and keeping the connection open would let you avoid the extra
overhead and get a little bit more capacity.
> It would be great if you can provide a bit code for second method.
Keeping the connection open but how to know that this is end a
particular image and save it.

The client is told how many bytes of image data it should expect, so it
can count how many it has written to the image file and close the file
when all of them.

You'll learn more if you try it yourself first! :)
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,770
Messages
2,569,583
Members
45,072
Latest member
trafficcone

Latest Threads

Top