How do you open a network connection?

Sockets are the basis of any network communication in your computer.

If you open a website, a socket is created in the background. The same thing applies to chat applications or any other network application.

Related Course: Complete Python Programming Course & Exercises

The TCP/IP model

Packets are delivered to another computer using a layered model: the TCP/IP model.

Every layer of the TCP/IP model has a certain purpose.

tcp/ip model

The application layers responsibility is solely the communication language between two applications.

Sockets work on the application protocol layer. Applications often have their own protocols, which in turn use sockets in the background.

If you want to make your own application protocol (chat system or other purposes) you can use sockets.

Note: This model is used in all network applications.

Python simple socket client

Make a socket application?

We will create a simple socket client, that mimics a webbrowser. The web uses port 80. The steps a webbrowser does to get a webpage are:

  • create socket
  • get server ip address from domain name
  • connect to server using ip address
  • send request to server
  • receive data (webpage)
    In code that will look like:
     # Socket client example in python

    import socket
    import sys

    host = ''
    port = 80 # web

    # create socket
    print('# Creating socket')
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    except socket.error:
    print('Failed to create socket')

    print('# Getting remote IP address')
    remote_ip = socket.gethostbyname( host )
    except socket.gaierror:
    print('Hostname could not be resolved. Exiting')

    # Connect to remote server
    print('# Connecting to server, ' + host + ' (' + remote_ip + ')')
    s.connect((remote_ip , port))

    # Send data to remote server
    print('# Sending data to server')
    request = "GET / HTTP/1.0\r\n\r\n"

    except socket.error:
    print 'Send failed'

    # Receive data
    print('# Receive data from server')
    reply = s.recv(4096)

    print reply
    Of course all data returned will be shown as the raw html (no images, css etc).

Download network examples