Hendrik van Rooyen wrote:
Ferdinand Sousa  wrote:

==========================================================
.# file receiver
# work in progress

import socket

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
HOST = '192.168.1.17'
PORT = 31400

s.bind((HOST, PORT))
s.listen(3)
conn, addr = s.accept()
print 'conn at address',addr
conn.send('READY')
f = open('C:\\Documents and Settings\\USER\\Desktop\\test.pdf','wb')
fsize=int(conn.recv(8))
print 'File size',fsize
f.write(conn.recv(fsize))

This recv is not guaranteed to actually receive the number of
characters you are asking for - it will stop when it has received that
many, yes, but it may return with less, or even none if there is a time out set.

The TCP is a more or less featureless stream of characters.

Consider including a start marker so you know where the lesson starts.
If you do this, consider the possibility of having a "false sync".
Sending/receiving  the length is good - also google for "netstring"
Google for "escaping".

Consider writing a loop to receive until the required length has been
received - look at the docs for the recv function - it can tell you how much has been received.

f.close()
conn.close()
s.close()

raw_input('Press any key to exit')


===========================================================

# file sender !!!
# Work in progress

import socket, os
from stat import ST_SIZE
HOST = '192.168.1.17'
PORT = 31400              # Arbitrary non-privileged port

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

s.connect((HOST,PORT))
if s.recv(5)!='READY':
   raw_input('Unable to connect \n\n Press any key to exit ...')
   s.close()
   exit()

f=open('C:\\Documents and Settings\\USER\\Desktop\\t.pdf', 'rb')
fsize=os.stat(f.name)[ST_SIZE]

s.send(str(fsize))
s.send(f.read())

Are you sure that the send will send all the chars
that you ask it to send?

If yes - why do you think this?

What are the values that the send can return?

s.close()
f.close()

===========================================================

You're also sending the length as a bytestring str(fsize), which will have an unknown length, but you're receiving the length as exactly 8 bytes. Either mark the end of the length in some way (with '\n'?) and look for that when receiving, or pad what you send to exactly 8 bytes (str(fsize).zfill(8)).
--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to