Wednesday, 25 October 2017

Socket Programming in Python

Socket programming is a way of connecting two nodes on a network to communicate with each other. One socket(node) listens on a particular port at an IP, while other socket reaches out to the other to form a connection. Server forms the listener socket while client reaches out to the server.They are the real backbones behind web browsing. In simpler terms there is a server and a client.

import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

Here we made a socket instance and passed it two parameters. The first parameter is AF_INET and the second one is SOCK_STREAM. AF_INET refers to the address family ipv4. The SOCK_STREAM means connection oriented TCP protocol.
Now we can connect to a server using this socket.
Connecting to a server:
Note that if any error occurs during the creation of a socket then a socket.error is thrown and we can only connect to a server by knowing it’s ip. You can find the ip of the server by using this :
$ ping www.google.com
import socket 

ip = socket.gethostbyname('www.google.com')
print ip

#Example of a SCRIPT
# An example script to connect to Google using socket
# programming in Python
import socket # for socket
import sys
 
try:
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    print "Socket successfully created"
except socket.error as err:
    print "socket creation failed with error %s" %(err)
 
# default port for socket
port = 80
 
try:
    host_ip = socket.gethostbyname('www.google.com')
except socket.gaierror:
 
    # this means could not resolve the host
    print "there was an error resolving the host"
    sys.exit()
 
# connecting to the server
s.connect((host_ip, port))
 
print "the socket has successfully connected to google \
on port == %s" %(host_ip)
Output :
Socket successfully created
the socket has successfully connected to google 
on port == 173.194.40.19
  • First of all we made a socket.
  • Then we resolved google’s ip and lastly we connected to google.
  • Now we need to know how can we send some data through a socket.
  • For sending data the socket library has a sendall function. This function allows you to send data to a server to which the socket is connected and server can also send data to the client using this function.
A simple server-client program :
Server : A server has a bind() method which binds it to a specific ip and port so that it can listen to incoming requests on that ip and port.A server has a listen() method which puts the server into listen mode. This allows the server to listen to incoming connections. And last a server has an accept() and close() method. The accept method initiates a connection with the client and the close method closes the connection with the client.
# first of all import the socket library
import socket              
 
# next create a socket object
s = socket.socket()        
print "Socket successfully created"
 
# reserve a port on your computer in our
# case it is 12345 but it can be anything
port = 12345               
 
# Next bind to the port
# we have not typed any ip in the ip field
# instead we have inputted an empty string
# this makes the server listen to requests
# coming from other computers on the network
s.bind(('', port))       
print "socket binded to %s" %(port)
 
# put the socket into listening mode
s.listen(5)    
print "socket is listening"           
 
# a forever loop until we interrupt it or
# an error occurs
while True:
 
   # Establish connection with client.
   c, addr = s.accept()    
   print 'Got connection from', addr
 
   # send a thank you message to the client.
   c.send('Thank you for connecting')
 
   # Close the connection with the client
   c.close()
If you like Abin's blog and would like to contribute, you can also write an article using abinabraham.online or mail your article to ambattuabin@gmail.com. 
Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above.

Google’s TGIF (Thank God It’s Friday)

Google’s TGIF ( Thank God It’s Friday ) meetings were a long-standing tradition within the company, serving as weekly all-hands meetings whe...