🎓 Top 15 Udemy Courses (80-90% Discount): My Udemy Courses - Ramesh Fadatare — All my Udemy courses are real-time and project oriented courses.
▶️ Subscribe to My YouTube Channel (178K+ subscribers): Java Guides on YouTube
▶️ For AI, ChatGPT, Web, Tech, and Generative AI, subscribe to another channel: Ramesh Fadatare on YouTube
The socket module in Python provides access to the BSD socket interface. It allows you to create networking applications, handle connections, send and receive data over the network, and more.
Table of Contents
- Introduction
- Key Classes and Functions
socketsocket.socketsocket.bindsocket.listensocket.acceptsocket.connectsocket.sendsocket.recvsocket.closesocket.gethostbynamesocket.gethostnamesocket.getaddrinfo
- Examples
- Creating a Simple Server
- Creating a Simple Client
- Handling Multiple Connections
- Using Non-Blocking Sockets
- Resolving Hostnames
- Real-World Use Case
- Conclusion
- References
Introduction
The socket module in Python provides a way to work with network connections and sockets. It supports both TCP and UDP protocols and allows for both blocking and non-blocking operations. This module is essential for building networked applications in Python.
Key Classes and Functions
socket
The socket class provides a way to create and manipulate network sockets.
import socket
socket.socket
Creates a new socket using the given address family, socket type, and protocol number.
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
socket.bind
Binds the socket to an address and port.
s.bind(('localhost', 12345))
socket.listen
Enables the server to accept connections.
s.listen(5)
socket.accept
Accepts a connection. The socket must be bound to an address and listening for connections.
conn, addr = s.accept()
socket.connect
Connects to a remote socket at the given address.
s.connect(('localhost', 12345))
socket.send
Sends data to the socket.
s.send(b'Hello, World!')
socket.recv
Receives data from the socket.
data = s.recv(1024)
socket.close
Closes the socket.
s.close()
socket.gethostbyname
Returns the IP address of a hostname.
ip = socket.gethostbyname('www.example.com')
socket.gethostname
Returns the hostname of the machine.
hostname = socket.gethostname()
socket.getaddrinfo
Translates the host/port argument into a sequence of 5-tuples that contain all the necessary information to create a socket.
addr_info = socket.getaddrinfo('www.example.com', 80)
Examples
Creating a Simple Server
import socket
def server():
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind(('localhost', 12345))
s.listen(5)
print('Server listening on port 12345')
while True:
conn, addr = s.accept()
print(f'Connected by {addr}')
data = conn.recv(1024)
if not data:
break
conn.sendall(data)
conn.close()
if __name__ == '__main__':
server()
Creating a Simple Client
import socket
def client():
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(('localhost', 12345))
s.sendall(b'Hello, World!')
data = s.recv(1024)
print(f'Received {data}')
s.close()
if __name__ == '__main__':
client()
Handling Multiple Connections
import socket
import threading
def handle_client(conn, addr):
print(f'Connected by {addr}')
while True:
data = conn.recv(1024)
if not data:
break
conn.sendall(data)
conn.close()
def server():
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind(('localhost', 12345))
s.listen(5)
print('Server listening on port 12345')
while True:
conn, addr = s.accept()
client_thread = threading.Thread(target=handle_client, args=(conn, addr))
client_thread.start()
if __name__ == '__main__':
server()
Using Non-Blocking Sockets
import socket
def non_blocking_server():
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind(('localhost', 12345))
s.listen(5)
s.setblocking(False)
print('Non-blocking server listening on port 12345')
while True:
try:
conn, addr = s.accept()
except BlockingIOError:
continue
print(f'Connected by {addr}')
data = conn.recv(1024)
if data:
conn.sendall(data)
conn.close()
if __name__ == '__main__':
non_blocking_server()
Resolving Hostnames
import socket
def resolve_hostname():
hostname = 'www.example.com'
ip_address = socket.gethostbyname(hostname)
print(f'The IP address of {hostname} is {ip_address}')
if __name__ == '__main__':
resolve_hostname()
Real-World Use Case
Simple Chat Application
import socket
import threading
def handle_client(conn, addr):
print(f'Connected by {addr}')
while True:
try:
data = conn.recv(1024)
if not data:
break
broadcast(data, conn)
except:
break
conn.close()
def broadcast(message, connection):
for client in clients:
if client != connection:
try:
client.send(message)
except:
client.close()
clients.remove(client)
def server():
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind(('localhost', 12345))
s.listen(5)
print('Chat server listening on port 12345')
while True:
conn, addr = s.accept()
clients.add(conn)
client_thread = threading.Thread(target=handle_client, args=(conn, addr))
client_thread.start()
clients = set()
if __name__ == '__main__':
server()
Client Code:
import socket
import threading
def receive_messages(sock):
while True:
try:
message = sock.recv(1024)
print(message.decode())
except:
break
def client():
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect(('localhost', 12345))
threading.Thread(target=receive_messages, args=(sock,)).start()
while True:
message = input()
sock.send(message.encode())
if __name__ == '__main__':
client()
Conclusion
The socket module in Python provides a powerful and flexible way to create networked applications. It supports both TCP and UDP protocols, blocking and non-blocking operations, and is essential for any application that requires network communication.
References
My Top and Bestseller Udemy Courses. The sale is going on with a 70 - 80% discount. The discount coupon has been added to each course below:
Build REST APIs with Spring Boot 4, Spring Security 7, and JWT
[NEW] Learn Apache Maven with IntelliJ IDEA and Java 25
ChatGPT + Generative AI + Prompt Engineering for Beginners
Spring 7 and Spring Boot 4 for Beginners (Includes 8 Projects)
Available in Udemy for Business
Building Real-Time REST APIs with Spring Boot - Blog App
Available in Udemy for Business
Building Microservices with Spring Boot and Spring Cloud
Available in Udemy for Business
Java Full-Stack Developer Course with Spring Boot and React JS
Available in Udemy for Business
Build 5 Spring Boot Projects with Java: Line-by-Line Coding
Testing Spring Boot Application with JUnit and Mockito
Available in Udemy for Business
Spring Boot Thymeleaf Real-Time Web Application - Blog App
Available in Udemy for Business
Master Spring Data JPA with Hibernate
Available in Udemy for Business
Spring Boot + Apache Kafka Course - The Practical Guide
Available in Udemy for Business
Comments
Post a Comment
Leave Comment