Sockets | Python

04 Oct, 2021
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 functions below to create client server programs. Socket methods  
s.bind – This method binds address hostname, port number to socket
  
s.listen – This method setups and start TCP listener
  
s.accept – This passively accepts client connection, waiting until connection arrives blocking
  
s.connect – This method actively initiates TCP server connection
  
General socket methods  
s.recv – This method receives TCP message
  
s.send – This method transmits TCP message
  
s.recvfrom – This method receives UDP message
  
s.sendto – This method transmits UDP message
  
s.close – This method closes socket
  
s.gethostname – Returns a hostname
  
Examples: sending date from server to client  
client side
Output :today's Date
 
Python3
# importing required modulesimport socket    import datetime # initializing sockets = socket.socket()    host = socket.gethostname() port = 12345 # binding port and hosts.bind((host, port))   # waiting for a client to connects.listen(5)         while True:   # accept connection   c, addr = s.accept()          print ('got connection 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()
Python3
import sockets = socket.socket()host = socket.gethostname()port = 12345 # connect to hosts.connect((host, port)) # recv message and decode here 1024 is buffer size.   print (s.recv(1024).decode())  s.close()
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 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 reasonsExamples:sending date from server to client  
client side
Input : vivek  
Input : 17BIT0382  
Output : password match 
 
Python3
import socket localIP = "127.0.0.1"localPort = 20001bufferSize = 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 filedi ={'17BIT0382':'vivek', '17BEC0647':'shikhar', '17BEC0150':'tanveer','17BCE2119':'sahil', '17BIT0123':'sidhant'} while(True):   # receiving name from client   name, addr1 = UDPServerSocket.recvfrom(bufferSize)     # receiving 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) 
Python3
import socket # user inputname = 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 # connecting to hostsUDPClientSocket = socket.socket(family = socket.AF_INET, type = socket.SOCK_DGRAM)  # sending username by encoding itUDPClientSocket.sendto(bytesToSend1, serverAddrPort) # sending password by encoding itUDPClientSocket.sendto(bytesToSend2, serverAddrPort)  # receiving status from servermsgFromServer = UDPClientSocket.recvfrom(bufferSize) msg = "Message from Server {}".format(msgFromServer[0].decode()) print(msg)
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:  
 
anikaseth98
surinderdawra388
kalrap615
kk9826225
nnr223442
adnanirshad158
Picked
Python-socket
Python
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.