美文网首页2023学python
跟我一起从零开始学python(二)网络编程

跟我一起从零开始学python(二)网络编程

作者: 天天玩python | 来源:发表于2023-07-06 14:27 被阅读0次

    前言

    昨天讲解了关于从零入门python的第一遍,编程语法必修内容,比如python3基础入门,列表与元组,字符串,字典,条件丶循环和其他语句丶函数丶面向对象丶异常和文件处理
    1.跟我一起从零开始学python(一)编程语法必修

    今天讲第二篇:python并发编程:网络编程

    本系列文根据以下学习路线展开讲述,由于内容较多,:从零开始学python到高级进阶路线图

    第一章:网络编程

    1.网络编程

    网络编程是指使用计算机网络进行通信的编程技术。在Python中,可以使用socket模块来实现网络编程。

    socket是一个封装了TCP/IP协议的网络编程库,它提供了一种通用的网络编程接口,可以用于创建客户端和服务器端程序。在Python中,可以使用socket模块来创建socket对象,然后使用该对象进行网络通信。

    下面是一个简单的网络编程示例,其中创建了一个服务器端和一个客户端,客户端向服务器端发送消息,服务器端接收到消息后将其打印出来:

    服务器端代码:

    import socket
    
    # 创建socket对象
    server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    
    # 绑定IP地址和端口号
    server_socket.bind(('127.0.0.1', 8888))
    
    # 监听端口
    server_socket.listen(5)
    
    print('服务器已启动,等待客户端连接...')
    
    # 等待客户端连接
    client_socket, client_address = server_socket.accept()
    
    print('客户端已连接,地址为:', client_address)
    
    # 接收客户端消息
    data = client_socket.recv(1024)
    
    print('接收到客户端消息:', data.decode())
    
    # 关闭socket连接
    client_socket.close()
    server_socket.close()
    

    客户端代码:

    import socket
    
    # 创建socket对象
    client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    
    # 连接服务器
    client_socket.connect(('127.0.0.1', 8888))
    
    # 发送消息
    client_socket.send('Hello, server!'.encode())
    
    # 关闭socket连接
    client_socket.close()
    

    PyCharm中编译和运行Matlab文件,需要先安装Matlab并配置好环境变量。然后,在PyCharm中打开Matlab文件,点击运行按钮即可编译和运行Matlab文件。如果需要传递参数,可以在运行配置中设置。

    2.TCP/IP简介

    TCP/IP是一种网络协议,它是互联网的基础协议。TCP/IP协议族包括了许多协议,其中最重要的是TCPIP协议。

    TCP协议是一种面向连接的协议,它提供了可靠的数据传输服务。TCP协议通过三次握手建立连接,然后通过数据分段和确认机制来保证数据的可靠传输。

    IP协议是一种无连接的协议,它提供了数据包的传输服务。IP协议通过路由选择算法来确定数据包的传输路径,然后将数据包传输到目的地。

    在网络编程中,我们通常使用TCP协议来进行数据传输。TCP协议提供了可靠的数据传输服务,适用于需要保证数据传输可靠性的场景,如文件传输、邮件传输等。而IP协议则适用于需要快速传输数据的场景,如视频流传输、实时通信等。

    3.网络设计模块

    1.Socket简介

    Socket是一种通信机制,它允许不同的进程在网络上进行通信。在Python中,Socket是通过socket模块来实现的。Socket通常用于客户端和服务器之间的通信,但也可以用于进程之间的通信。

    2.Socket模块使用

    Python中的socket模块提供了一组函数和类,用于创建和操作Socket。常用的函数和类包括:

    • socket():创建一个Socket对象。
    • bind():将Socket绑定到一个特定的地址和端口。
    • listen():开始监听连接请求。
    • accept():接受一个连接请求,并返回一个新的Socket对象。
    • connect():连接到一个远程Socket。
    • send():发送数据。
    • recv():接收数据。

    3.服务器

    在Python中,可以使用socket模块创建一个服务器。服务器通常需要绑定到一个特定的地址和端口,并监听连接请求。当有客户端连接到服务器时,服务器会接受连接请求,并创建一个新的Socket对象来处理客户端请求。

    以下是一个简单的Python服务器示例:

    import socket
    
    HOST = '127.0.0.1'  # 服务器地址
    PORT = 8888  # 服务器端口号
    
    # 创建一个Socket对象
    server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    
    # 绑定到地址和端口
    server_socket.bind((HOST, PORT))
    
    # 开始监听连接请求
    server_socket.listen(1)
    
    print('Server is running on {}:{}'.format(HOST, PORT))
    
    while True:
        # 接受一个连接请求,并返回一个新的Socket对象
        client_socket, client_address = server_socket.accept()
        print('Client connected from {}:{}'.format(client_address[0], client_address[1]))
    
        # 处理客户端请求
        data = client_socket.recv(1024)
        print('Received data: {}'.format(data.decode()))
    
        # 发送响应数据
        response = 'Hello, client!'
        client_socket.send(response.encode())
    
        # 关闭连接
        client_socket.close()
    

    4.客户端

    在Python中,可以使用socket模块创建一个客户端。客户端通常需要连接到一个远程Socket,并发送请求数据。当服务器响应请求时,客户端会接收响应数据。

    以下是一个简单的Python客户端示例:

    import socket
    
    HOST = '127.0.0.1'  # 服务器地址
    PORT = 8888  # 服务器端口号
    
    # 创建一个Socket对象
    client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    
    # 连接到远程Socket
    client_socket.connect((HOST, PORT))
    
    # 发送请求数据
    request = 'Hello, server!'
    client_socket.send(request.encode())
    
    # 接收响应数据
    response = client_socket.recv(1024)
    print('Received data: {}'.format(response.decode()))
    
    # 关闭连接
    client_socket.close()
    

    5.文件下载器

    文件下载器是一个常见的网络应用程序,它可以从远程服务器下载文件并保存到本地。在Python中,可以使用socket模块和urllib模块来实现文件下载器。

    以下是一个简单的Python文件下载器示例:

    import socket
    import urllib.request
    
    HOST = '127.0.0.1'  # 服务器地址
    PORT = 8888  # 服务器端口号
    FILE_URL = 'http://example.com/file.txt'  # 文件下载地址
    FILE_NAME = 'file.txt'  # 文件保存路径
    
    # 创建一个Socket对象
    client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    
    # 连接到远程Socket
    client_socket.connect((HOST, PORT))
    
    # 发送请求数据
    request = 'GET {}\r\n'.format(FILE_URL)
    client_socket.send(request.encode())
    
    # 接收响应数据
    response = client_socket.recv(1024)
    print('Received data: {}'.format(response.decode()))
    
    # 下载文件并保存到本地
    with open(FILE_NAME, 'wb') as f:
        while True:
            data = client_socket.recv(1024)
            if not data:
                break
            f.write(data)
    
    # 关闭连接
    client_socket.close()
    

    4.补充内容

    1.网络编程中的UDP协议

    UDP(User Datagram Protocol)是一种无连接的、不可靠的传输协议,它不保证数据包的可靠性和顺序性,但是传输速度快,适用于一些对数据可靠性要求不高的应用场景,如视频、音频等实时传输。

    在Python中,使用socket模块可以实现UDP协议的网络编程。下面是一个简单的UDP服务器和客户端的示例:

    UDP服务器:

    import socket
    
    # 创建UDP套接字
    server_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    
    # 绑定IP地址和端口号
    server_socket.bind(('127.0.0.1', 8888))
    
    while True:
        # 接收数据
        data, addr = server_socket.recvfrom(1024)
        print('Received from %s:%s.' % addr)
        print('Data: %s' % data.decode())
    
        # 发送数据
        server_socket.sendto('Hello, client!'.encode(), addr)
    

    UDP客户端:

    import socket
    
    # 创建UDP套接字
    client_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    
    # 发送数据
    client_socket.sendto('Hello, server!'.encode(), ('127.0.0.1', 8888))
    
    # 接收数据
    data, addr = client_socket.recvfrom(1024)
    print('Received from %s:%s.' % addr)
    print('Data: %s' % data.decode())
    
    # 关闭套接字
    client_socket.close()
    

    UDP协议中,发送数据时需要指定目标地址和端口号,接收数据时会返回发送方的地址和端口号。由于UDP协议不保证数据的可靠性和顺序性,因此在实际应用中需要考虑数据丢失、重复、乱序等问题。

    2.UDP协议与TCP协议的区别

    UDP协议和TCP协议是两种常用的网络传输协议,它们有以下几点区别:

    • 连接方式TCP协议是面向连接的协议,而UDP协议是无连接的协议。TCP协议在传输数据之前需要先建立连接,而UDP协议不需要。

    • 可靠性TCP协议是可靠的协议,它保证数据的可靠传输,而UDP协议是不可靠的协议,它不保证数据的可靠传输。

    • 传输效率UDP协议比TCP协议传输效率高,因为UDP协议不需要建立连接和维护连接状态,而TCP协议需要。

    • 数据包大小UDP协议传输的数据包大小限制为64KB,而TCP协议没有限制。

    • 应用场景TCP协议适用于对数据传输可靠性要求较高的场景,如文件传输、邮件传输等;而UDP协议适用于对数据传输实时性要求较高的场景,如视频直播、语音通话等。

    3.UDP协议代码实现方式

    UDP协议是一种无连接的协议,它不保证数据传输的可靠性和顺序性,但是具有传输速度快的优点。下面是Python中使用UDP协议进行网络编程的代码实现方式:

    服务器端代码:

    import socket
    
    # 创建UDP套接字
    server_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    
    # 绑定IP地址和端口号
    server_socket.bind(('127.0.0.1', 8888))
    
    # 接收数据
    while True:
        data, addr = server_socket.recvfrom(1024)
        print('Received from %s:%s.' % addr)
        print('Data: %s' % data.decode())
    
        # 发送数据
        server_socket.sendto('Hello, client!'.encode(), addr)
    

    客户端代码:

    import socket
    
    # 创建UDP套接字
    client_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    
    # 发送数据
    client_socket.sendto('Hello, server!'.encode(), ('127.0.0.1', 8888))
    
    # 接收数据
    data, addr = client_socket.recvfrom(1024)
    print('Received from %s:%s.' % addr)
    print('Data: %s' % data.decode())
    
    # 关闭套接字
    client_socket.close()
    

    在上面的代码中,服务器端首先创建了一个UDP套接字,并绑定了IP地址和端口号。然后通过recvfrom()方法接收客户端发送的数据,并通过sendto()方法向客户端发送数据。客户端同样创建了一个UDP套接字,并通过sendto()方法向服务器端发送数据,然后通过recvfrom()方法接收服务器端发送的数据。最后,客户端关闭套接字。

    本系列文根据以下学习路线展开讲述,由于内容较多,:从零开始学python到高级进阶路线图

    下章讲:python并发编程:多线程

    相关文章

      网友评论

        本文标题:跟我一起从零开始学python(二)网络编程

        本文链接:https://www.haomeiwen.com/subject/cfbludtx.html