mirror of
https://github.com/python/cpython.git
synced 2025-07-24 03:35:53 +00:00
Added comments, use 'global' and change prompt to "ftp.py> "
This commit is contained in:
parent
bd07b31d82
commit
bfef4a0873
1 changed files with 17 additions and 5 deletions
|
@ -4,6 +4,18 @@
|
||||||
# but this is not a complete implementation! Yet it shows how a simple
|
# but this is not a complete implementation! Yet it shows how a simple
|
||||||
# FTP client can be built, and you are welcome to extend it to suit
|
# FTP client can be built, and you are welcome to extend it to suit
|
||||||
# it to your needs...
|
# it to your needs...
|
||||||
|
#
|
||||||
|
# How it works (assuming you've read the RFC):
|
||||||
|
#
|
||||||
|
# User commands are passed uninterpreted to the server. However, the
|
||||||
|
# user never needs to send a PORT command. Rather, the client opens a
|
||||||
|
# port right away and sends the appropriate PORT command to the server.
|
||||||
|
# When a response code 150 is received, this port is used to receive
|
||||||
|
# the data (which is written to stdout in this version), and when the
|
||||||
|
# data is exhausted, a new port is opened and a corresponding PORT
|
||||||
|
# command sent. In order to avoid errors when reusing ports quickly
|
||||||
|
# (and because there is no s.getsockname() method in Python yet) we
|
||||||
|
# cycle through a number of ports in the 50000 range.
|
||||||
|
|
||||||
|
|
||||||
import sys, posix, string
|
import sys, posix, string
|
||||||
|
@ -60,12 +72,12 @@ def control(hostname):
|
||||||
# (Cycle through a number of ports to avoid problems with reusing
|
# (Cycle through a number of ports to avoid problems with reusing
|
||||||
# a port within a short time.)
|
# a port within a short time.)
|
||||||
#
|
#
|
||||||
cycle = [0]
|
nextport = 0
|
||||||
#
|
#
|
||||||
def newdataport(s, f):
|
def newdataport(s, f):
|
||||||
port = cycle[0]
|
global nextport
|
||||||
cycle[0] = (port+1) % 16
|
port = nextport + FTP_DATA_PORT
|
||||||
port = port + FTP_DATA_PORT
|
nextport = (nextport+1) % 16
|
||||||
r = socket(AF_INET, SOCK_STREAM)
|
r = socket(AF_INET, SOCK_STREAM)
|
||||||
r.bind(gethostbyname(gethostname()), port)
|
r.bind(gethostbyname(gethostname()), port)
|
||||||
r.listen(0)
|
r.listen(0)
|
||||||
|
@ -122,7 +134,7 @@ def getdata(r):
|
||||||
#
|
#
|
||||||
def getcommand():
|
def getcommand():
|
||||||
try:
|
try:
|
||||||
return raw_input('ftp> ')
|
return raw_input('ftp.py> ')
|
||||||
except EOFError:
|
except EOFError:
|
||||||
return ''
|
return ''
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue