Upload Files to Server From Client Python
Network Programming - Server & Client B : File Transfer
bogotobogo.com site search:
Note
In this chapter, we're going to extend Python Network Programming I - Basic Server / Customer A, and try to file transfer from a server to numerous clients. The main purpose is to check the performance of the server from which clients download files.
Local file transfer
Here is the code to send a file from a local server to a local client.
# server.py import socket # Import socket module port = 60000 # Reserve a port for your service. s = socket.socket() # Create a socket object host = socket.gethostname() # Get local car name southward.bind((host, port)) # Bind to the port s.listen(5) # Now expect for customer connection. print 'Server listening....' while True: conn, addr = s.accept() # Establish connection with client. impress 'Got connexion from', addr data = conn.recv(1024) impress('Server received', repr(data)) filename='mytext.txt' f = open up(filename,'rb') l = f.read(1024) while (l): conn.transport(l) impress('Sent ',repr(l)) l = f.read(1024) f.close() impress('Done sending') conn.send('Thank you for connecting') conn.close() # client.py import socket # Import socket module s = socket.socket() # Create a socket object host = socket.gethostname() # Get local machine proper noun port = 60000 # Reserve a port for your service. s.connect((host, port)) southward.send("Howdy server!") with open up('received_file', 'wb') as f: print 'file opened' while True: impress('receiving information...') data = s.recv(1024) impress('data=%s', (data)) if not information: suspension # write data to a file f.write(data) f.shut() print('Successfully become the file') south.close() print('connection airtight')
Output on a local server:
Server listening.... Got connection from ('192.168.56.10', 62854) ('Server received', "'Hi server!'") ('Sent ', "'1 1234567890\\northward ... ('Sent ', "'4567890\\n105 ... ('Sent ', "'300 1234567890\\due north'") Washed sending
Output on a local client:
file opened receiving data... information=1 1234567890 two 1234567890 ... 103 1234567890 104 123 receiving data... data=4567890 105 1234567890 106 1234567890 ... 299 1234567890 receiving data... information=300 1234567890 Thanks for connecting receiving data... data= Successfully become the file connection airtight
multithread tcp file transfer on localhost
Our server code above tin can only collaborate with one client. If we try to connect with a second client, yet, it simply won't respond to the new customer. To let the server interact with multiple clients, we demand to apply multi-threading. Hither is the new server script to accept multiple client connections:
# server2.py import socket from threading import Thread from SocketServer import ThreadingMixIn TCP_IP = 'localhost' TCP_PORT = 9001 BUFFER_SIZE = 1024 class ClientThread(Thread): def __init__(self,ip,port,sock): Thread.__init__(self) self.ip = ip self.port = port self.sock = sock print " New thread started for "+ip+":"+str(port) def run(self): filename='mytext.txt' f = open(filename,'rb') while Truthful: fifty = f.read(BUFFER_SIZE) while (l): self.sock.send(l) #print('Sent ',repr(50)) l = f.read(BUFFER_SIZE) if not 50: f.close() self.sock.shut() break tcpsock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) tcpsock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, ane) tcpsock.bind((TCP_IP, TCP_PORT)) threads = [] while True: tcpsock.listen(5) impress "Waiting for incoming connections..." (conn, (ip,port)) = tcpsock.accept() print 'Got connectedness from ', (ip,port) newthread = ClientThread(ip,port,conn) newthread.beginning() threads.append(newthread) for t in threads: t.join() # client2.py #!/usr/bin/env python import socket TCP_IP = 'localhost' TCP_PORT = 9001 BUFFER_SIZE = 1024 due south = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.connect((TCP_IP, TCP_PORT)) with open('received_file', 'wb') as f: print 'file opened' while Truthful: #impress('receiving information...') data = s.recv(BUFFER_SIZE) print('data=%south', (data)) if not information: f.close() impress 'file close()' pause # write data to a file f.write(information) print('Successfully go the file') south.close() print('connection closed')
Below is the output from the server panel when we run two clients simultaneously:
$ python server2.py Waiting for incoming connections... Got connection from ('127.0.0.1', 55184) New thread started for 127.0.0.1:55184 Waiting for incoming connections... Got connexion from ('127.0.0.1', 55185) New thread started for 127.0.0.i:55185 Waiting for incoming connections...
tcp file download from EC2 to local
In the post-obit codes, we made two changes:
- ip switched to amazon ec2 ip
- To summate the time to accept download a file, we import fourth dimension module.
# server3.py on EC2 case import socket from threading import Thread from SocketServer import ThreadingMixIn # TCP_IP = 'localhost' TCP_IP = socket.gethostbyaddr("your-ec2-public_ip")[0] TCP_PORT = 60001 BUFFER_SIZE = 1024 print 'TCP_IP=',TCP_IP impress 'TCP_PORT=',TCP_PORT class ClientThread(Thread): def __init__(cocky,ip,port,sock): Thread.__init__(self) self.ip = ip self.port = port cocky.sock = sock print " New thread started for "+ip+":"+str(port) def run(cocky): filename='mytext.txt' f = open(filename,'rb') while True: 50 = f.read(BUFFER_SIZE) while (l): self.sock.send(fifty) #print('Sent ',repr(l)) 50 = f.read(BUFFER_SIZE) if not l: f.close() cocky.sock.close() suspension tcpsock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) tcpsock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) tcpsock.demark((TCP_IP, TCP_PORT)) threads = [] while True: tcpsock.listen(5) print "Waiting for incoming connections..." (conn, (ip,port)) = tcpsock.accept() print 'Got connexion from ', (ip,port) newthread = ClientThread(ip,port,conn) newthread.kickoff() threads.append(newthread) for t in threads: t.join() # client3.py on local machine #!/usr/bin/env python #!/usr/bin/env python import socket import time #TCP_IP = 'localhost' TCP_IP = 'ip-ec2-example' TCP_PORT = 60001 BUFFER_SIZE = 1024 south = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.connect((TCP_IP, TCP_PORT)) clock_start = time.clock() time_start = time.fourth dimension() with open up('received_file', 'wb') as f: print 'file opened' while Truthful: #print('receiving data...') information = s.recv(1024) #print('data=%southward', (data)) if not data: f.close() impress 'file close()' break # write data to a file f.write(data) print('Successfully get the file') s.shut() print('connection closed') clock_end = fourth dimension.clock() time_end = time.time() duration_clock = clock_end - clock_start print 'clock: start = ',clock_start, ' end = ',clock_end print 'clock: duration_clock = ', duration_clock duration_time = time_end - time_start print 'time: start = ',time_start, ' end = ',time_end print 'time: duration_time = ', duration_time
Server panel shows the following output after a connection from my local home machine:
$ python server3.py TCP_IP= ec2-... TCP_PORT= 60001 Waiting for incoming connections... Got connexion from ('108.239.135.40', 56742) New thread started for 108.239.135.40:56742
The ip is isp'south:
On my local mac:
$ python client3.py file opened file close() Successfully become the file connection closed clock: beginning = 0.018806 end = 0.038608 clock: duration_clock = 0.019802 time: start = 1434991840.37 end = 1434991840.42 fourth dimension: duration_time = 0.0457620620728
File downloaded from EC2, received_file is simple, and it looks like this:
From EC2 1 ii iii 4 5 half-dozen seven viii ix
Download time vs number of clients
Hither is the output showing the wall-clock fourth dimension depending on the number of concurrent connections:
Our server is located in California, and the following picture compares the download speed between Usa and Japan:
Python Network Programming
Network Programming - Server & Customer A : Basics
Network Programming - Server & Customer B : File Transfer
Network Programming 2 - Chat Server & Client
Network Programming III - SocketServer
Network Programming Iv - SocketServer Asynchronous request
Python tutorial
Python Dwelling
Introduction
Running Python Programs (os, sys, import)
Modules and IDLE (Import, Reload, exec)
Object Types - Numbers, Strings, and None
Strings - Escape Sequence, Raw String, and Slicing
Strings - Methods
Formatting Strings - expressions and method calls
Files and os.path
Traversing directories recursively
Subprocess Module
Regular Expressions with Python
Regular Expressions Crook Sheet
Object Types - Lists
Object Types - Dictionaries and Tuples
Functions def, *args, **kargs
Functions lambda
Congenital-in Functions
map, filter, and reduce
Decorators
Listing Comprehension
Sets (spousal relationship/intersection) and itertools - Jaccard coefficient and shingling to check plagiarism
Hashing (Hash tables and hashlib)
Dictionary Comprehension with zip
The yield keyword
Generator Functions and Expressions
generator.send() method
Iterators
Classes and Instances (__init__, __call__, etc.)
if__name__ == '__main__'
argparse
Exceptions
@static method vs class method
Private attributes and private methods
bits, bytes, bitstring, and constBitStream
json.dump(south) and json.load(s)
Python Object Serialization - pickle and json
Python Object Serialization - yaml and json
Priority queue and heap queue data construction
Graph data structure
Dijkstra's shortest path algorithm
Prim's spanning tree algorithm
Closure
Functional programming in Python
Remote running a local file using ssh
SQLite 3 - A. Connecting to DB, create/driblet table, and insert information into a tabular array
SQLite 3 - B. Selecting, updating and deleting data
MongoDB with PyMongo I - Installing MongoDB ...
Python HTTP Web Services - urllib, httplib2
Spider web scraping with Selenium for checking domain availability
Residue API : Http Requests for Humans with Flask
Blog app with Tornado
Multithreading ...
Python Network Programming I - Bones Server / Client : A Basics
Python Network Programming I - Basic Server / Customer : B File Transfer
Python Network Programming Two - Chat Server / Customer
Python Network Programming III - Repeat Server using socketserver network framework
Python Network Programming 4 - Asynchronous Request Treatment : ThreadingMixIn and ForkingMixIn
Python Coding Questions I
Python Coding Questions II
Python Coding Questions III
Python Coding Questions Iv
Python Coding Questions V
Python Coding Questions VI
Python Coding Questions Seven
Python Coding Questions Eight
Image processing with Python image library Pillow
Python and C++ with SIP
PyDev with Eclipse
Matplotlib
Redis with Python
NumPy array basics A
NumPy Matrix and Linear Algebra
Pandas with NumPy and Matplotlib
Celluar Automata
Batch gradient descent algorithm
Longest Common Substring Algorithm
Python Unit Test - TDD using unittest.TestCase class
Simple tool - Google page ranking by keywords
Google App Hello Globe
Google App webapp2 and WSGI
Uploading Google App Hello World
Python 2 vs Python 3
virtualenv and virtualenvwrapper
Uploading a big file to AWS S3 using boto module
Scheduled stopping and starting an AWS instance
Cloudera CDH5 - Scheduled stopping and starting services
Removing Cloud Files - Rackspace API with curl and subprocess
Checking if a procedure is running/hanging and end/run a scheduled task on Windows
Apache Spark 1.3 with PySpark (Spark Python API) Shell
Apache Spark i.2 Streaming
bottle 0.12.7 - Fast and simple WSGI-micro framework for small web-applications ...
Flask app with Apache WSGI on Ubuntu14/CentOS7 ...
Fabric - streamlining the use of SSH for application deployment
Ansible Quick Preview - Setting up web servers with Nginx, configure enviroments, and deploy an App
Neural Networks with backpropagation for XOR using one hidden layer
NLP - NLTK (Natural language Toolkit) ...
RabbitMQ(Message banker server) and Celery(Job queue) ...
OpenCV3 and Matplotlib ...
Unproblematic tool - Concatenating slides using FFmpeg ...
iPython - Signal Processing with NumPy
iPython and Jupyter - Install Jupyter, iPython Notebook, drawing with Matplotlib, and publishing it to Github
iPython and Jupyter Notebook with Embedded D3.js
Downloading YouTube videos using youtube-dl embedded with Python
Machine Learning : scikit-learn ...
Django i.half dozen/1.eight Web Framework ...
bruntnellsomuckledge.blogspot.com
Source: https://www.bogotobogo.com/python/python_network_programming_server_client_file_transfer.php