1
Current Location:
>
Network Programming
Starting with Python: A Gentle Introduction to Network Programming
Release time:2024-10-24 10:33:01 Number of reads 14
Copyright Statement: This article is an original work of the website and follows the CC 4.0 BY-SA copyright agreement. Please include the original source link and this statement when reprinting.

Article link: https://baogewang.com/en/content/aid/596?s=en%2Fcontent%2Faid%2F596

A Blessing for Programming Beginners

Hey there! Have you been learning Python network programming lately? Don't worry, although it sounds a bit advanced, if you follow along with me step by step, I believe you'll be able to get started in no time. Network programming is a very useful part of Python knowledge. Once you master it, you can develop all kinds of interesting network applications. So let's get started now!

Socket Programming

For network programming, sockets are the most basic concept. A socket is like a file descriptor on a network, through which we can send and receive network data. Python provides us with two main types of sockets: TCP sockets and UDP sockets.

TCP sockets are reliable and connection-oriented, just like the HTTP requests we use every day. UDP sockets, on the other hand, are connectionless, and data may be lost or arrive out of order, but they transmit faster. Which one to choose depends on your specific application scenario.

Let's look at a simple TCP server example:

import socket


server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)


host = socket.gethostname()
port = 12345  # Set port


server_socket.bind((host, port))


server_socket.listen(5)

print(f'Server started, listening on {host}:{port}')

while True:
    # Wait for client connection
    client_socket, addr = server_socket.accept()
    print(f'Connection from {addr}')

    # Receive client data
    data = client_socket.recv(1024)
    print(f'Received data: {data.decode()}')

    # Send reply
    reply = b'Hello from server'  
    client_socket.sendall(reply)

    # Close client socket
    client_socket.close()

This example creates a TCP server that can accept client connections, receive data, and make replies. You can run this script locally, then use Telnet or other tools as a client to connect to it, send some data, and you'll see the output on the server side.

HTTP Programming

Most network applications are actually based on the HTTP protocol, such as the websites and APIs we use every day. Python's standard library http.server provides us with a simple HTTP server that can quickly set up a static file server.

import http.server
import socketserver

PORT = 8000

Handler = http.server.SimpleHTTPRequestHandler

with socketserver.TCPServer(("", PORT), Handler) as httpd:
    print(f"Server started, listening on http://localhost:{PORT}")
    httpd.serve_forever()

Run this script, open your browser and visit http://localhost:8000, and you'll see a list of files in the current directory. If you want to write more complex web applications, you can use frameworks like Flask or Django.

For client-side HTTP requests, you can use the urllib or requests library. Here's an example of sending a GET request using the requests library:

import requests

response = requests.get('https://api.github.com/events')


print(response.status_code)  


print(response.headers)


print(response.text)

Isn't it simple? Using the requests library, you can easily send various types of HTTP requests like GET, POST, etc.

Advanced Topics

If you want to write a high-concurrency network server, such as a chat server or an online game server, you'll need to use asynchronous programming or event-driven architecture. Python has well-known asynchronous programming libraries like asyncio and Twisted to choose from. However, for beginners, their concepts and usage might be a bit complex.

import asyncio

async def handle_client(reader, writer):
    request = None
    while request != 'quit':
        request = (await reader.read(255)).decode('utf8').strip()
        response = f'Received: {request}
'
        writer.write(response.encode('utf8'))
        await writer.drain()
    writer.close()

async def run_server():
    server = await asyncio.start_server(handle_client, '127.0.0.1', 8888)
    async with server:
        await server.serve_forever()

asyncio.run(run_server())

This is a simple echo server example implemented using asyncio. After a client connects, the server will return each message sent by the client as is, until it receives 'quit'. You can use Telnet or NC command-line tools to connect to this server and experience the effect of asynchronous programming.

Summary

Alright, that's the basic knowledge of Python network programming I've introduced to you today. Although it's just the tip of the iceberg, I believe that through these example codes, you've already gained an initial understanding of network programming. The road of programming is long and arduous, so please keep up the good work! If there's anything you don't understand, feel free to ask me anytime. Looking forward to your next network application!

The Art of Network Programming
Previous
2024-10-24 10:33:01
Python Network Programming: A Wonderful Journey from Sockets to Web Frameworks
2024-11-08 09:06:02
Next
Related articles