Networking application with Python: Note that please explain and create a manual
ID: 3820307 • Letter: N
Question
Networking application with Python:
Note that please explain and create a manual for your code and walk me through its execution process and put comments in the code. I have to explain it to my teaching assistant
thanks again.
the code template for this question:
#!/usr/bin/env python3
# created by Ali J on March 7th 2017
import argparse
import sys
import itertools
import socket
from socket import socket as Socket
# A simple web server
# Issues:
# Ignores CRLF requirement
# Header must be < 1024 bytes
# ...
# probabaly loads more
def main():
# Command line arguments. Use a port > 1024 by default so that we can run
# without sudo, for use as a real server you need to use port 80.
parser = argparse.ArgumentParser()
parser.add_argument('--port', '-p', default=2080, type=int,
help='Port to use')
args = parser.parse_args()
# Create the server socket (to handle tcp requests using ipv4), make sure
# it is always closed by using with statement.
with Socket(socket.AF_INET, socket.SOCK_STREAM) as server_socket:
# The socket stays connected even after this script ends. So in order
# to allow the immediate reuse of the socket (so that we can kill and
# re-run the server while debugging) we set the following option. This
# is potentially dangerous in real code: in rare cases you may get junk
# data arriving at the socket.
server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
server_socket.bind(('', args.port))
server_socket.listen(1)
print("server ready")
while True:
with server_socket.accept()[0] as connection_socket:
request = connection_socket.recv(1024).decode('ascii')
reply = http_handle(request)
connection_socket.send(reply.encode('ascii'))
print(" Received request")
print("======================")
print(request.rstrip())
print("======================")
print(" Replied with")
print("======================")
print(reply.rstrip())
print("======================")
return 0
def http_handle(request_string):
"""Given a http requst return a response
Both request and response are unicode strings with platform standard
line endings.
"""
assert not isinstance(request_string, bytes)
# Fill in the code to handle the http request here. You will probably want
# to write additional functions to parse the http request into a nicer data
# structure (eg a dict), and to easily create http responses.
raise NotImplementedError
pass
if __name__ == "__main__":
sys.exit(main())