Javascript required
Skip to content Skip to sidebar Skip to footer

Upload Files to Server From Client Python

Network Programming - Server & Client B : File Transfer

python_logo

Bookmark and Share




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:

  1. ip switched to amazon ec2 ip
  2. 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:

ATT-IP.png

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:

connections.png

Our server is located in California, and the following picture compares the download speed between Usa and Japan:

time2.png

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