Socket Programming with Multi-threading in Python
Prerequisite : Socket Programming in Python, Multi-threading in Python
Socket Programming-> It helps us to connect a client to a server. Client is message sender and receiver and server is just a listener that works on data sent by client.
What is a Thread?
A thread is a light-weight process that does not require much memory overhead, they are cheaper than processes.
What is Multi-threading Socket Programming? port on your computer
Multithreading is a process of executing multiple threads simultaneously in a single process.
Multi-threading Modules :
A _thread module & threading module is used for multi-threading in python, these modules help in synchronization and provide a lock to a thread in use.
from _thread import *
import threading
A lock object is created by->
print_lock = threading.Lock()
A lock has two states, “locked” or “unlocked”. It has two basic methods acquire() and release(). When the state is unlocked print_lock.acquire() is used to change state to locked and print_lock.release() is used to change state to unlock.
The function thread.start_new_thread() is used to start a new thread and return its identifier. The first argument is the function to call and its second argument is a tuple containing the positional list of arguments.
Let’s study client-server multithreading socket programming by code-
Note:-The code works with python3.
Multi-threaded Server Code
Python3
import socket
from _thread import *
import threading
print_lock = threading.Lock()
def threaded(c):
while True :
data = c.recv( 1024 )
if not data:
print ( 'Bye' )
print_lock.release()
break
data = data[:: - 1 ]
c.send(data)
c.close()
def Main():
host = ""
port = 12345
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((host, port))
print ("socket binded to port", port)
s.listen( 5 )
print ("socket is listening")
while True :
c, addr = s.accept()
print_lock.acquire()
print ( 'Connected to :' , addr[ 0 ], ':' , addr[ 1 ])
start_new_thread(threaded, (c,))
s.close()
if __name__ = = '__main__' :
Main()
|
Console Window:
socket binded to port 12345
socket is listening
Connected to : 127.0.0.1 : 11600
Bye
Client Code
Python
import socket
def Main():
host = '127.0.0.1'
port = 12345
s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.connect((host,port))
message = "shaurya says geeksforgeeks"
while True :
s.send(message.encode( 'ascii' ))
data = s.recv( 1024 )
print ( 'Received from the server :' , str (data.decode( 'ascii' )))
ans = input ( '\nDo you want to continue(y/n) :' )
if ans = = 'y' :
continue
else :
break
s.close()
if __name__ = = '__main__' :
Main()
|
Console Window:
Received from the server : skeegrofskeeg syas ayruahs
Do you want to continue(y/n) :y
Received from the server : skeegrofskeeg syas ayruahs
Do you want to continue(y/n) :n
Process finished with exit code 0
Reference->
https://docs.python.org/2/library/thread.html
Last Updated :
14 Jul, 2022
Like Article
Save Article
Share your thoughts in the comments
Please Login to comment...