Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > Python > socket receive file does not match sent file

Reply
Thread Tools

socket receive file does not match sent file

 
 
zelzel.zsu@gmail.com
Guest
Posts: n/a
 
      11-06-2005
I wrote two simple socket program.
one for sending a file and the other for receiving the file.
but when I run it, a curious thing happened.
The received file was samller that the sent file.

$ cat receivefile.py
#!/usr/local/bin/python
# -*- coding: utf-8 -*-

import socket
import time
import string
import sys

sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.bind(('', 9000))
sock.listen(5)

try:
while True:
# 1. client connect, open file
newSocket, address = sock.accept()
print "Connected from ", address

filename = sys.argv[1]
f=open( filename, 'wb')

# 2. recieve data
while True:
data = newSocket.recv(8192)
if not data: break
f.write(data)
# 3.close file
f.close()
print filename, "Received\n"

finally:
sock.close()



$ cat putfile.py
#!/usr/local/bin/python
# -*- coding: utf-8 -*-

import sys
import socket
import string

# "Usage: prog file hostip"

filename = sys.argv[1]
host = sys.argv[2]


f=open(filename, 'rb')
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((host, 9000))

while True:
data = f.read(8192)
if not data: break
else:
s.send(data)
f.close()
s.close()
print filename, " Sent!\n"

$ python receivefile.py save_apache_1.33.tar.gz
$ python putfile.py apache_1.33.tar.gz localhost

The result is : save_apache_1.33.tar.gz 's size was smaller then the
apache_1.33.tar.gz file

What is the cause of the problem, can anyone tell me?
Thanks.

 
Reply With Quote
 
 
 
 
zelzel.zsu@gmail.com
Guest
Posts: n/a
 
      11-07-2005
when I test the two program in the same OS,
i mean from a redhat 9 OS to a redhat 9 OS,
It's ok. receivefile match sent file.


But when I run receiver on a Redhat 9,
and send file from a windows XP,
the received file's size is randomized.

May be that's where the problem is.

 
Reply With Quote
 
 
 
 
Irmen de Jong
Guest
Posts: n/a
 
      11-08-2005
http://www.velocityreviews.com/forums/(E-Mail Removed) wrote:
> when I test the two program in the same OS,
> i mean from a redhat 9 OS to a redhat 9 OS,
> It's ok. receivefile match sent file.
>
>
> But when I run receiver on a Redhat 9,
> and send file from a windows XP,
> the received file's size is randomized.
>
> May be that's where the problem is.
>


No. Read Jean-Paul's reply.

--Irmen
 
Reply With Quote
 
Fredrik Lundh
Guest
Posts: n/a
 
      11-08-2005
(E-Mail Removed) wrote:

> while True:
> data = f.read(8192)
> if not data: break
> else:
> s.send(data)


> What is the cause of the problem, can anyone tell me?


using sendall instead of send should fix this. see the library reference for
details:

send( string[, flags])
Send data to the socket. The socket must be connected to a remote
socket. The optional flags argument has the same meaning as for recv()
above. Returns the number of bytes sent. Applications are responsible
for checking that all data has been sent; if only some of the data was
transmitted, the application needs to attempt delivery of the
remaining data.

sendall( string[, flags])

Send data to the socket. The socket must be connected to a remote
socket. The optional flags argument has the same meaning as for recv()
above. Unlike send(), this method continues to send data from string
until either all data has been sent or an error occurs. None is
returned on success. On error, an exception is raised, and there is no
way to determine how much data, if any, was successfully sent.

</F>



 
Reply With Quote
 
zelzel.zsu@gmail.com
Guest
Posts: n/a
 
      11-08-2005
Thanks Fredrik Lundh,
This is great!

I've rewrote the code and it works!
Thanks a lot.

 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
Re: socket.unbind or socket.unlisten? - socket.error: (48, 'Addressalready in use') Steve Holden Python 0 02-01-2009 12:45 PM
Re: socket.unbind or socket.unlisten? - socket.error: (48, 'Addressalready in use') Laszlo Nagy Python 0 02-01-2009 07:37 AM
socket.unbind or socket.unlisten? - socket.error: (48, 'Addressalready in use') Laszlo Nagy Python 1 01-27-2009 05:05 PM
Re: socket.unbind or socket.unlisten? - socket.error: (48,'Address already in use') Jean-Paul Calderone Python 0 01-27-2009 01:41 PM
2 PCs with huge difference in sent/receive packets No Email Computer Support 0 12-23-2005 08:08 PM



Advertisments