Sockets | Python
Last Updated :
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
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 listener
|
3. |
s.accept – This passively 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
Python3
import socket
import datetime
s = socket.socket()
host = socket.gethostname()
port = 12345
s.bind((host, port))
s.listen( 5 )
while True :
c, addr = s.accept()
print ( 'got connection from addr' , addr)
date = datetime.datetime.now()
d = str (date)
c.send(d.encode())
c.close()
|
Python3
import socket
s = socket.socket()
host = socket.gethostname()
port = 12345
s.connect((host, port))
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 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
Python3
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" )
di = { '17BIT0382' : 'vivek' , '17BEC0647' : 'shikhar' , '17BEC0150' : 'tanveer' ,
'17BCE2119' : 'sahil' , '17BIT0123' : 'sidhant' }
while ( True ):
name, addr1 = UDPServerSocket.recvfrom(bufferSize)
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)
UDPServerSocket.sendto(bytesToSend, addr1)
|
Python3
import socket
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
UDPClientSocket = socket.socket(family = socket.AF_INET, type = socket.SOCK_DGRAM)
UDPClientSocket.sendto(bytesToSend1, serverAddrPort)
UDPClientSocket.sendto(bytesToSend2, serverAddrPort)
msgFromServer = 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:
Like Article
Suggest improvement
Share your thoughts in the comments
Please Login to comment...