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

前言

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

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

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

关注公众号:python技术训练营,学习进阶一步到位

适用于零基础学习和进阶人群的python资源:

① 腾讯认证python完整项目实战教程笔记PDF
② 十几个大厂python面试专题PDF
③ python全套视频教程(零基础-高级进阶JS逆向)
④ 百个项目实战+源码+笔记
⑤ 编程语法-机器学习-全栈开发-数据分析-爬虫-APP逆向等全套项目+文档
⑥ 交流学习
⑦ 想要兼职接单

第一章:网络编程

1.网络编程

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

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

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

服务器端代码:

扫描二维码关注公众号,回复: 16403008 查看本文章
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资源:

① 腾讯认证python完整项目实战教程笔记PDF
② 十几个大厂python面试专题PDF
③ python全套视频教程(零基础-高级进阶JS逆向)
④ 百个项目实战+源码+笔记
⑤ 编程语法-机器学习-全栈开发-数据分析-爬虫-APP逆向等全套项目+文档
⑥ 交流学习
⑦ 想要兼职接单

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

猜你喜欢

转载自blog.csdn.net/ch950401/article/details/131595770