Sockets | Python

What is socket?
Sockets act as bidirectional communications channel where they are endpoints of it.sockets may communicate within the process, between different process and also process on different places.

Socket Module- s.socket.socket(socket_family, socket_type, protocol=0)

  • socket_family-AF_UNIX or AF_INET
  • socket_type-SOCK_STREAM or SOCK_DGRAM
  • protocol-left out, ot defaulting to 0

Once socket object is created as mentioned above, now we can use fucntions below to create client sever programs.
Socket methods

Sr no. Method and Description

Server socket methods

1. s.bind – This method binds address hostname, port number to socket

2. s.listen – This method setups and start TCP listner



3. s.accept – This passievly accepts client connection, waiting until connection arrives blocking

Client socket methods

1. s.connect – This method actively initiates TCP server connection

General socket methods

Sr no. Method and Description
1. s.recv – This method receives TCP message

2. s.send – This method transmits TCP message

3. s.recvfrom – This method receives UDP message

4. s.sendto – This method transmits UDP message

5. s.close – This method closes socket



6. s.gethostname – Returns a hostname

Examples: sending date from server to client

client side
Output :today's Date
filter_none

edit
close

play_arrow

link
brightness_4
code

# imporing required modules
import socket     
import datetime
  
# initializing socket
s = socket.socket()     
host = socket.gethostname()  
port = 12345
  
# binding port and host
s.bind((host, port))   
  
# waiting for a client to connect
s.listen(5)  
         
while True:
   # accept connection
   c, addr = s.accept()        
   print ('got connecton from addr', addr)
   date = datetime.datetime.now()  
   d = str(date)
  
   # sending data type should be string and encode before sending
   c.send(d.encode())      
   c.close()

chevron_right


filter_none

edit
close

play_arrow

link
brightness_4
code

import socket
s = socket.socket()
host = socket.gethostname()
port = 12345
  
# connect to host
s.connect((host, port))
  
# recv message and decode here 1024 is buffer size.    
print (s.recv(1024).decode())   
s.close()

chevron_right


Note: Create 2 instances of python compiler to run client and server code separately do not run them on the same instance.

Output:

Server side-

Client side-
Here current date time which is fetched from server appears

UDP Sockets

UDP is USER DATAGRAM PROTOCOL, this is a lightweight protocol which has basic error checking mechanism with no acknowledgement and no sequencing but very fast due to these reasons

Examples:sending date from server to client

client side

Input : vivek Input : 17BIT0382 Output : password match
filter_none

edit
close

play_arrow

link
brightness_4
code

import socket
  
localIP = "127.0.0.1"
localPort = 20001
bufferSize = 1024
  
UDPServerSocket = socket.socket(family = socket.AF_INET, type = socket.SOCK_DGRAM)
UDPServerSocket.bind((localIP, localPort))
print("UDP server up and listening")
  
# this might be database or a file
di ={'17BIT0382':'vivek', '17BEC0647':'shikhar', '17BEC0150':'tanveer',
'17BCE2119':'sahil', '17BIT0123':'sidhant'
  
while(True):
   # receiving name from client
   name, addr1 = UDPServerSocket.recvfrom(bufferSize)  
  
   # receivinf pwd from client
   pwd, addr1 = UDPServerSocket.recvfrom(bufferSize)  
  
   name = name.decode()  
   pwd = pwd.decode()
   msg =''
   if name not in di:
       msg ='name does not exists'
       flag = 0
   for i in di:
      if i == name:
          if di[i]== pwd:
              msg ="pwd match"
              flag = 1
          else:
              msg ="pwd wrong"
      bytesToSend = str.encode(msg)
      # sending encoded status of name and pwd
      UDPServerSocket.sendto(bytesToSend, addr1)  

chevron_right


filter_none

edit
close

play_arrow

link
brightness_4
code

import socket
  
# user input
name = input('enter your username : ')     
bytesToSend1 = str.encode(name)
password = input('enter your password : ')
bytesToSend2 = str.encode(password)
  
serverAddrPort = ("127.0.0.1", 20001)
bufferSize = 1024
  
# conncting to hosts
UDPClientSocket = socket.socket(family = socket.AF_INET, type = socket.SOCK_DGRAM)  
  
# sending username by encoding it
UDPClientSocket.sendto(bytesToSend1, serverAddrPort)  
# sending password by encoding it
UDPClientSocket.sendto(bytesToSend2, serverAddrPort)  
  
# receiving status from server 
msgFromServer = UDPClientSocket.recvfrom(bufferSize)  
msg = "Message from Server {}".format(msgFromServer[0].decode())  
print(msg)

chevron_right


For simplicity in the code, I have chosen a dictionary you can use a database, file or CSV file, etc. for various other purposes.
Output:




My Personal Notes arrow_drop_up

Check out this Author's contributed articles.

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.


Article Tags :

Be the First to upvote.


Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.