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

前言

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

今天讲第二篇: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到高级进阶路线图

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/138426.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

修改/etc/fstab文件导致Linux无法正常启动解决方法

如果把 /etc/fstab 文件修改错了,也重启了,系统崩溃启动不了了,那该怎么办?比如: [rootlocalhost ~]# vi /etc/fstab UUIDc2ca6f57-b15c-43ea-bca0-f239083d8bd2 ext4 defaults 1 1 UUID0b23d315-33a7-48a4-bd37-9248…

ceph-deploy bclinux aarch64 ceph 14.2.10【2】vdbench rbd 块设备rbd 测试失败

上篇 ceph-deploy bclinux aarch64 ceph 14.2.10-CSDN博客 安装vdbench 下载vdbench 下载页面 Vdbench Downloads (oracle.com) 包下载 需要账号登录,在弹出层点击同意才能继续下载 用户手册 https://download.oracle.com/otn/utilities_drivers/vdbench/vdb…

搜集的升压芯片资料

DC-DC升压芯片,输入电压0.65v/1.5v/1.8v/2v/2.5v/2.7v/3v/3.3v/3.6v/5v/12v/24v航誉微 HUB628是一款超小封装高效率、直流升压稳压电路。输入电压范围可由低2V伏特到24伏特,升压可达28V可调,且内部集成极低RDS内阻100豪欧金属氧化物半导体场效应晶体管的…

人物百科怎么创建?教你如何创建人物百度百科注意以下方式技巧!

百科就像互联网上的名片,不仅代表身份,而且拥有极高的可信度。因此,许多名人都希望利用百科提高自己的知名度。任何人都可以编辑人物百科词条,但为了成功上传,需要一些技巧。以下是小媒同学给大家带来的人物百科快速创…

成都瀚网科技有限公司抖音带货正规

随着互联网的蓬勃发展,越来越多的公司开始利用网络平台进行产品销售。其中,抖音作为一款广受欢迎的短视频平台,已经成为众多商家眼中的“香饽饽”。在这场电商狂欢中,成都瀚网科技有限公司(以下简称“瀚网科技”&#…

AMEYA360:江苏润石再次重磅发布11颗通过AEC-Q100认证的车规级芯片

为进一步满足众多新能源汽车客户对车规级芯片的需求,江苏润石持续研发更多的车规级产品,再次重磅发布11颗通过AEC-Q100 Grade1 & MSL 1湿敏等级认证的车规级芯片;进一步展示了江苏润石在车规级芯片领域孜孜不倦的追求,以及深耕汽车电子市…

研究生做实验找不到数据集咋办?

做实验找不到数据集咋办?这是很多研究者和开发者都会遇到的问题。数据集是实验的基础,没有合适的数据集,就无法验证模型的性能和效果。那么,有没有什么方法可以快速地找到我们需要的数据集呢?本文将介绍4个常用的数据集搜索平台,希望能够帮助大家解决这个难题。下面以室内…

单极性非归零码(NRZ)、双极性非归零码(NRZ)、单极性归零码、双极性非归零码(NRZ)、差分码的编码规则与其功率谱

数字信号的基带传输的基本概念与传输码型 主要涉及一些数字基带传输的基本概念和数字基带传输的简单码型。码型包括:单极性非归零码(NRZ)、双极性非归零码(NRZ)、单极性归零码、双极性非归零码(NRZ&#xf…

【第2章 Node.js基础】2.4 Node.js 全局对象(一)

什么是Node.js 全局对象 对于浏览器引擎来说,JavaScript 脚本中的 window 是全局对象,而Node.js程序中的全局对象是 global,所有全局变量(除global本身外)都是global 对象的属性。全局变量和全局对象是所有模块都可以调用的。Node.is 的全局…

零代码Prompt应用大赛正式开始!飞桨星河社区五周年活动第一站

五周年盛典将至!抢发第一站! 在大模型时代,飞桨星河社区致力于让人人都成为大模型开发者!飞桨星河社区零代码应用开发工具链,帮助大家轻松实现灵感落地、场景化需求落地,助力每个人实现工作与生活的效能提…

Node-RED系列教程-29nodered与三菱PLC基于MC协议通信测试

安装mc通信节点: node-red-contrib-mcprotocol 包含2个节点,一个节点负责读,一个节点负责写。 本教程目前只演示读功能。由于没有硬件,首先利用hsl demo软件模拟出一个用于测试mc通信的服务端。 mc读过程如下: 输入节点开启定时即可。 MC读节点配置:

HarmonyOS开发(一):开发工具起步

1、DevEco Studio 工具下载地址:HUAWEI DevEco Studio和SDK下载和升级 | HarmonyOS开发者 DevEco Studio基础配置 Node.jsOhpm 这两个都可以在进入IDE时在工具上选择下载安装 2、HelloWorld工程 打开DevEco,那么会进入欢迎页,点击Create Project---…

Swift--字符、字符串与集合类型

系列文章目录 第一章:量值与基本数据类型 第二章:字符、字符串与集合类型 文章目录 系列文章目录字符串组合 三种集合数组集合字典类型 Swift是一种弱化指针的语言,它提供了String类型和Character类型来描述字符串与字符 //构造一个字符串 …

李开复:未来AI或助力中国成为科技“火车头”

原创 | 文 BFT机器人 6月22日,创新工场的董事长兼首席执行官李开复,受邀在一场峰会上发表演讲,主题为《AI的飞奔时代》。 中国真的能成为AI超级强国吗? 李开复在演讲上盘点过去,展望未来,分析了过去几年中…

Hologres常用语句

1、列转行 regexp_split_to_table(要分割的字段,分割关键字) select regexp_split_to_table(aa,bb, ,) 2、行转列 string_agg(要拼接的字段,拼接关键字) 进阶版--按字段名汇总转换 select A字段,string_agg(B字段,, order by 排序字段) from 表名 group by A字段

C语言基础篇4:变量与存储

1 局部变量和全局变量 在介绍局部变量和全局变量前,先了解一些关于作用域方面的内容。作用域的作用就是决定程序中的哪些语句是可用的,换句话说,就是程序中的可见性。作用域有局部作用域和全局作用域,那么局部变量就具有局部作用域…

火山引擎 DataLeap 计算治理自动化解决方案实践和思考

更多技术交流、求职机会,欢迎关注字节跳动数据平台微信公众号,回复【1】进入官方交流群 【导读】本文旨在探讨火山引擎 DataLeap 在处理计算治理过程中所面临的问题及其解决方案,并展示这些解决方案带来的实际收益。主要内容包括:…

专业开源人员的需求仍在增长

Linux 基金会执行总监根据 Dice.com 的一项调查结果表示:「开源正变得越来越专业化,各大公司都在寻求具备这方面技能的专业型人才。」网上有研究分析了两组「2017 年度开源工作调查与报告」,主要分析结果如下: 89% 的招聘人员表示…

代码人生里哪些书触动灵魂?技术大咖精选8本好书为你揭秘!

导语 | 在这个快节奏、信息繁杂的时代,我们总在寻找那些能够触动内心、启迪思维的知识瑰宝。书籍,无疑是我们忠诚的伙伴和引路人。10 月 18 日,腾讯云 TVP 举办了第八期 TVP 读书分享会,汇集 4 位技术大咖,为你倾情推荐…

[pytorch]设备选择以及卷积神经网络的应用

0.写在前面: 首先这篇文章还没写完,因为今天要尝试对我之前的一个框架做一个简单的更新迭代,所以目前先更新这么多. 1.关于设备的选择 首先,目前的大多数电脑都是自带一些GPU(图形计算单元,在这里被称之为cuda), 需要安装相关的驱动才能正常使用这些设备和调用他们的具体情况…