Python3网络编程——Socket原理简介

本文涉及的产品
数据传输服务 DTS,数据同步 small 3个月
推荐场景:
数据库上云
数据传输服务 DTS,数据迁移 small 3个月
推荐场景:
MySQL数据库上云
数据传输服务 DTS,数据同步 1个月
简介:

一、Python网络编程——客户端/服务器架构

1、服务器:服务器就是一系列硬件和软件,为一个或多个客户端提供所需要的服务。存在的目的就是等待客户端的请求,并响应他它们,然后等待更多请求。

2、客户端:客户端因特定的请求联系服务器,并发送必要的数据,然后等待服务器的回应,即最后完成请求或给出故障的原因。

3、工作过程图示:    

     211656_DUjC_3821557.png

4、数据传输模式

     网络编程一般有两种数据传输模式:即两种协议  TCP  和  UDP  

     4.1、TCP方式的特点:

            (1)校验码(2)接收方反馈(3)信息包附带序号

     4.2、UDP方式的特点:

             (1)不建立连接:不需要花费时间建立连接和关闭连接

             (2)数据传输快:偶尔会丢失一两个消息

             (3)限制一个消息包不超过 64KB 的数据

     两种协议的对比:UDP 不建立连接,只保证数据的完整性,数据传输快,但是不保证数据真的被接收到,也不保证数据仅接收一次,同时也不保证数据的顺序。

 

二、Python网络编程模块——套接字 Socket 模块

1、创建套接字     

     语法格式为     sock = socket.socket(socket_family,socket_type,property=0)

     其中    socket_family 指定是 socket.AF_INET     地址类型IPV4或IPV6     默认为 IPV4  

               socket_type 指的是 socket.SOCK_STREAM 或 socket.SOCK_DGRAM   仅可用于Unix系统通信

               property=0 该参数默认为0,通常省略不写

2、创建 TCP 套接字

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

3、创建 UDP 套接字

     u = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)

 

三、TCP模式——服务器 server——套接字对象的方法

1、s.bind(address):将地址(服务端IP地址、端口)绑定到套接字上

     如果IP地址为 0.0.0.0 代表本机的任意一个IP           端口  0--1024 为系统保留

    address 必须是元组    即address = ('192.168.1.188',888)

    1.1、绑定的两种写法

           ① s.bind(('192.168.1.188',888))

           ② address = ('192.168.1.188',888)

               s.bind(address)

2、s.listen(backlog)       设置并启动TCP监听,其中 backlog 代表可以同时接受多少个socket连接

3、s.accept()     被动接受TCP客户端连接,一直等待直到连接到达。

 

四、TCP模式——客户端 client——套接字对象的方法

1、主动发起TCP服务器连接    c.connect()

2、异常时,返回错误码     c.connect_ex()

 

五、TCP模式——通用(适用于:服务端/客户端)——套接字对象的方法

1、 发送数据

      发送TCP消息(可能未将指定内容全部发送过去)   s.send()

      发送完整的TCP消息(推荐使用)    s.sendall()

2、接收 TCP 数据  s.recv(bufsize)

     bufsize 指定最多接收的数据量,可以使用1024   2048等

     如果不知道接收的数据量有多少,一般通过循环实现。

3、关闭套接字     s.close()

4、当前套接字地址   s.getsocketname()

5、设置套接字的阻塞或者非阻塞模式      s.setblocking()

6、设置阻塞套接字操作的超时时间         s.settimeout(timeout)   timeout为float类型,单位为秒

7、获取阻塞套接字操作的超时时间         s.gettimeout(timeout)   timeout为float类型,单位为秒

    

六、UDP模式

1、创建 UDP 套接字

     u = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)

2、接收 UDP 消息     s.recvfrom()

3、发送 UDP 消息     s.sendto()

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
Sqoop 企业级大数据迁移方案实战
Sqoop是一个用于在Hadoop和关系数据库服务器之间传输数据的工具。它用于从关系数据库(如MySQL,Oracle)导入数据到Hadoop HDFS,并从Hadoop文件系统导出到关系数据库。 本课程主要讲解了Sqoop的设计思想及原理、部署安装及配置、详细具体的使用方法技巧与实操案例、企业级任务管理等。结合日常工作实践,培养解决实际问题的能力。本课程由黑马程序员提供。
相关文章
|
3天前
|
JSON API 开发者
Python网络编程新纪元:urllib与requests库,让你的HTTP请求无所不能
【9月更文挑战第9天】随着互联网的发展,网络编程成为现代软件开发的关键部分。Python凭借简洁、易读及强大的特性,在该领域展现出独特魅力。本文介绍了Python标准库中的`urllib`和第三方库`requests`在处理HTTP请求方面的优势。`urllib`虽API底层但功能全面,适用于深入控制HTTP请求;而`requests`则以简洁的API和人性化设计著称,使HTTP请求变得简单高效。两者互补共存,共同推动Python网络编程进入全新纪元,无论初学者还是资深开发者都能从中受益。
21 7
|
2天前
|
API 开发者 Python
揭秘Python网络请求的幕后英雄:requests与urllib的恩怨情仇
【9月更文挑战第10天】在Python的网络请求领域,urllib与requests犹如武林中的两大高手,各自展现了独特的魅力。urllib作为标准库成员,自Python诞生以来便承担着网络请求的任务,以其稳定性和全面性著称。然而,其复杂的API让不少开发者望而却步。
8 2
WK
|
10天前
|
数据采集 XML 安全
常用的Python网络爬虫库有哪些?
Python网络爬虫库种类丰富,各具特色。`requests` 和 `urllib` 简化了 HTTP 请求,`urllib3` 提供了线程安全的连接池,`httplib2` 则具备全面的客户端接口。异步库 `aiohttp` 可大幅提升数据抓取效率。
WK
29 1
|
14天前
|
网络协议 Unix Linux
python socket和socketserver
python socket和socketserver
|
15天前
|
数据采集 机器学习/深度学习 人工智能
Python爬虫入门指南探索AI的无限可能:深度学习与神经网络的魅力
【8月更文挑战第27天】本文将带你走进Python爬虫的世界,从基础的爬虫概念到实战操作,你将学会如何利用Python进行网页数据的抓取。我们将一起探索requests库和BeautifulSoup库的使用,以及反爬策略的应对方法。无论你是编程新手还是有一定经验的开发者,这篇文章都将为你打开一扇通往数据抓取世界的大门。
|
2天前
|
机器学习/深度学习 人工智能 TensorFlow
神经网络入门到精通:Python带你搭建AI思维,解锁机器学习的无限可能
【9月更文挑战第10天】神经网络是开启人工智能大门的钥匙,不仅是一种技术,更是模仿人脑思考的奇迹。本文从基础概念入手,通过Python和TensorFlow搭建手写数字识别的神经网络,逐步解析数据加载、模型定义、训练及评估的全过程。随着学习深入,我们将探索深度神经网络、卷积神经网络等高级话题,并掌握优化模型性能的方法。通过不断实践,你将能构建自己的AI系统,解锁机器学习的无限潜能。
8 0
|
8天前
|
存储 网络协议 安全
C语言 网络编程(五)Socket和端口
Socket 是 TCP/IP 五层网络模型中应用层的编程接口,用于实现不同主机间应用程序的双向通信。它作为网络通信的端点,连接应用层与网络协议栈,提供可靠的流式或非流式数据传输服务。Socket 包括流式(SOCKET_STREAM)、数据报(SOCK_DGRAM)和原始套接字(SOCK_RAW)三种类型,分别适用于不同场景。通过 IP 地址和端口号,Socket 能准确识别并转发数据包至指定进程。端口号分为知名端口(1-1023)、注册端口(1024-49151)和动态端口(49152-65535),确保数据准确交付。
|
11天前
|
网络协议 C# 开发者
WPF与Socket编程的完美邂逅:打造流畅网络通信体验——从客户端到服务器端,手把手教你实现基于Socket的实时数据交换
【8月更文挑战第31天】网络通信在现代应用中至关重要,Socket编程作为其实现基础,即便在主要用于桌面应用的Windows Presentation Foundation(WPF)中也发挥着重要作用。本文通过最佳实践,详细介绍如何在WPF应用中利用Socket实现网络通信,包括创建WPF项目、设计用户界面、实现Socket通信逻辑及搭建简单服务器端的全过程。具体步骤涵盖从UI设计到前后端交互的各个环节,并附有详尽示例代码,助力WPF开发者掌握这一关键技术,拓展应用程序的功能与实用性。
30 0
|
11天前
|
数据采集 存储 JavaScript
构建你的首个Python网络爬虫:抓取、解析与存储数据
【8月更文挑战第31天】在数字时代的浪潮中,数据成为了新的石油。了解如何从互联网的海洋中提取有价值的信息,是每个技术爱好者的必备技能。本文将引导你通过Python编程语言,利用其强大的库支持,一步步构建出你自己的网络爬虫。我们将探索网页请求、内容解析和数据存储等关键环节,并附上代码示例,让你轻松入门网络数据采集的世界。
|
12天前
|
Rust 网络协议 安全
揭开Rust网络编程的神秘面纱:全新的Socket体验,让你告别内存泄漏的噩梦!
【8月更文挑战第31天】Rust语言凭借其卓越的内存安全性和高性能,在网络编程领域展现出独特优势。本文将带你探索Rust中的Socket编程,展示如何使用标准库`std::net`模块轻松实现TCP服务器与客户端。通过简洁的代码示例,你将看到Rust如何简化网络通信流程,并通过`async/await`异步模型高效处理并发连接。此外,Rust社区提供的优秀库如`tokio`和`async-std`进一步增强了异步网络编程的能力。无论是从基础示例还是高级应用,Rust都将为你带来耳目一新的网络编程体验。
42 0