欢迎访问宙启技术站
智能推送

Python网络编程函数的10个实用案例

发布时间:2023-06-26 17:20:07

Python 是一种高级编程语言,广泛应用于各种领域。其中,网络编程是Python 最为广泛应用和热门的领域之一。

Python 在网络编程中提供了丰富的库和模块,其中常用的函数如下:

1. socket()

socket() 函数是用于创建一个套接字,并返回套接字描述符。套接字是建立网络连接的一种方式,它提供了接受和发送数据的接口。可以使用 socket() 函数来创建客户端和服务器端的套接字。

2. bind()

bind() 函数是用于将一个套接字绑定到一个具体的地址和端口号。当一个套接字绑定到一个地址和端口号之后,它就可以通过这个地址和端口号来接收来自客户端的请求。

3. listen()

listen() 函数是用于将套接字设置为监听模式,这样它就可以接收来自客户端的请求。一个监听套接字一般用于服务器端的程序。

4. accept()

accept() 函数是用于接受来自客户端的请求,并返回一个新的套接字描述符,该描述符用于与客户端建立通信。服务器端程序通常会在一个循环中调用 accept() 函数以接受来自多个客户端的请求。

5. connect()

connect() 函数是用于客户端连接到服务器端的套接字,它需要指定服务器的地址和端口号。当 connect() 函数调用成功后,客户端就可以通过该套接字与服务器端进行通信了。

6. send()

send() 函数是用于发送数据的函数,它需要一个套接字描述符和要发送的数据作为参数。它返回发送的数据的长度,如果发送失败,则返回 -1。

7. recv()

recv() 函数是用于接收来自套接字的数据的函数,它需要一个套接字描述符和一个缓冲区的大小作为参数。它返回接收到的数据的长度,如果接收失败,则返回 -1。

8. close()

close() 函数是用于关闭一个套接字的函数。当一个套接字不再使用时,应该调用 close() 函数来关闭它。

9. setsockopt()

setsockopt() 函数是用于设置套接字选项的函数,它可以设置套接字的一些属性,如超时时间、缓冲区大小、重用地址等。

10. getsockopt()

getsockopt() 函数是用于获取套接字选项的函数,它可以获取套接字的一些属性,如超时时间、缓冲区大小、重用地址等。

以上是Python网络编程中常用的函数,下面我们来看一下这些函数的实际应用。

案例1:创建一个简单的TCP服务器

在Python中实现一个简单的TCP服务器,需要使用 socket()、bind()、listen()、accept()、send() 和 close() 函数,代码如下:

import socket

def run_server():
    host = "127.0.0.1"
    port = 8080

    server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)

    server_socket.bind((host, port))
    server_socket.listen(5)

    print("Server is running on port", port)

    while True:
        conn, addr = server_socket.accept()
        print("Client connected", addr)

        message = "Hello from server!"
        conn.sendall(message.encode())

        conn.close()
        print("Client disconnected")

运行代码后,可以在终端中输入 telnet localhost 8080,然后按 Enter 键,即可连接到服务器并收到消息。

案例2:创建一个简单的TCP客户端

在Python中实现一个简单的TCP客户端,需要使用 socket()、connect()、send() 和 recv() 函数,代码如下:

import socket

def run_client():
    host = "127.0.0.1"
    port = 8080

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

    client_socket.connect((host, port))

    message = "Hello from client!"
    client_socket.sendall(message.encode())

    data = client_socket.recv(1024)
    print("Received message:", data.decode())

    client_socket.close()

运行代码后,可以在终端中看到客户端发送的消息和服务器端返回的消息。

案例3:实现基于UDP的简单通信

在Python中实现基于UDP的简单通信,需要使用 socket()、sendto() 和 recvfrom() 函数,代码如下:

import socket

def run_udp():
    host = "127.0.0.1"
    port = 8080
 
    server_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)

    server_socket.bind((host, port))
 
    print("UDP server is running on port", port)

    while True:
        data, client_address = server_socket.recvfrom(1024)
        print("Received message:", data.decode())

        message = "Hello from server!"
        server_socket.sendto(message.encode(), client_address)

运行代码后,在终端中输入 nc -u localhost 8080,然后按 Enter 键,即可连接到UDP服务器并收发消息。

案例4:实现FTP上传

在Python中实现FTP上传,需要使用 socket()、bind()、listen()、accept()、recv()、open() 和 write() 函数,代码如下:

import socket

def run_ftp_server():
    host = "127.0.0.1"
    port = 8080

    server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)

    server_socket.bind((host, port))
    server_socket.listen(5)

    print("FTP server is running on port", port)

    while True:
        conn, addr = server_socket.accept()
        print("Client connected", addr)

        filename = conn.recv(1024).decode()

        file = open(filename, "wb")
        data = conn.recv(1024)

        while data:
            file.write(data)
            data = conn.recv(1024)

        file.close()
        conn.close()

        print("File received successfully")

运行代码后,在FTP客户端中输入 put filename 命令即可开始上传文件。

案例5:实现FTP下载

在Python中实现FTP下载,需要使用 socket()、connect()、send() 和 read() 函数,代码如下:

import socket

def run_ftp_client():
    host = "127.0.0.1"
    port = 8080

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

    client_socket.connect((host, port))

    filename = input("Enter filename to download: ")
    client_socket.sendall(filename.encode())

    file = open(filename, "wb")
    data = client_socket.recv(1024)

    while data:
        file.write(data)
        data = client_socket.recv(1024)

    file.close()
    client_socket.close()

    print("File downloaded successfully")

运行代码后,在FTP客户端中输入 get filename 命令即可开始下载文件。

案例6:使用urllib库获取网页的内容

在Python中使用urllib库获取网页的内容,例如:

import urllib.request

def get_html(url):
    response = urllib.request.urlopen(url)
    html = response.read().decode()
    return html

通过以上代码,可以访问某个网站并获取该网站的HTML代码。

案例7:使用requests库获取网页的内容

在Python中使用requests库获取网页的内容,例如:

import requests

def get_html(url):
    response = requests.get(url)
    html = response.text
    return html

通过以上代码,可以访问某个网站并获取该网站的HTML代码。

案例8:使用BeautifulSoup库解析HTML代码

在Python中使用BeautifulSoup库解析HTML代码,例如:

from bs4 import BeautifulSoup

def parse_html(html):
    soup = BeautifulSoup(html, 'html.parser')
    title = soup.title.string
    return title

通过以上