Python Network Programming
Tags: python, beginners
Published: 2020-03-03 16:11:00

You can do network programming in <a href="https://python.org">Python</a>, which is quite common because it's so quick to write a Python script. 

If this article seems hard, don't worry it's not. But you should know the <a href="https://pythonbasics.org/execute-python-scripts/">Python basics</a> before trying to make network scripts.

Python offers two levels of access network services. 

* **Low levels** (think byte level) of network service to support basic Socket, which provides a standard BSD Sockets API, you can access all the methods underlying operating system Socket interface. 


* **high level** (think existing protocols) like web, ftp, mail. If you want to use an existing internet protocol, scroll to the table below.

**What is Socket?**

Socket also known as "sockets", the process between the hosts or between a computer can communicate.
  
## Simple example

### Server

We use the <a href="https://docs.python.org/3.8/library/socket.html">socket module</a> and then the `socket()` function to create a socket object. 
Then define a *port*.  

Now we can call `bind(hostname, port)` function to specify the service (port).

Then, we call `accept()` method. The method waits for the client connection, and returns a connection object representing a client is connected to.

The complete code is as follows:

```python 
    # File name: server.py
    
    import socket # Import socket module
    
    s = socket.socket () # Create a socket object
    host = socket.gethostname () # get local host name
    port = 12345 # Set the port
    s.bind((host, port)) # Bind port
    
    s.listen(5) # connection requests from clients
    while True:
        c, addr = s.accept () # client connection.
        print('connection address:', addr)
        c.send('Welcome to dev.to!')
        c.close() # close the connection
```

### Client

Next we write a simple client to connect to the service instance created above. Port number is 12345 (same as server).

The `socket.connect (hosname, port)` method opens a TCP connection to the server.

After connecting we can server data. Remember, after the completion of the operation need to close the connection.

The complete code is as follows:

```python
    # File name: client.py
    
    import socket # Import socket module
    
    s = socket.socket() # Create a socket object
    host = socket.gethostname() # get local host name
    port = 12345 # set port
    
    s.connect((host, port))
    print(s.recv(1024))
    s.close()
```

Now we even have to open the terminal, the first terminal performs server.py file:

```
    $ python server.py
```

The second terminal performs client.py file:

```
    $ Python client.py
    Welcome to dev.to!
```

This is our first and then open a terminal, you will see the following information is output:

```
    Connection address: ( '192.168.2.64', 62461)
```

## Internet protocols

Here are some important internet protocols:

Agreement | useful function | port number | Python module
--- | --- | --- | ---
HTTP | Web access | 80 | httplib, urllib, xmlrpclib
NNTP | reading and posting news articles | 119 | nntplib
FTP | File Transfer | 20 | ftplib, urllib
SMTP | Send Mail | 25 | smtplib
POP3 | Incoming mail | 110 | poplib
IMAP4 | get the message | 143 | imaplib
Telnet | Command Line | 23 | telnetlib
Gopher | FIND | 70 | gopherlib, urllib