Python网络编程入门

一.Socket

简称套接字,是进程之间通信的一个工具,好比现实生活中的插座,所有的家用电器要想工作都是基于插座进行,进程之间要想进行网络通信需要Socket,Socket好比数据的搬运工~

2个进程之间通过Socket进行相互通讯,就必须有服务端和客户端。

  • 服务端:等待其他进程的连接,可接受发来的消息、可以回复消息~
  • 客户端: 主动连接服务端,可以发送消息,可以接受回复~

一个服务端可以接受多个客户端发来的消息,如下图:

 

二.服务端开发

1.导入socket包

2.创建一个Socket对象

socket_server = socket.socket()

3.绑定IP地址和端口

socket_server.bind(('localhost', 1319))

端口号自定义,但别和nodejs、Jupyter、MySQL或者Tomcat这些重合了就行~ 

4.监听端口

socket_server.listen(1)

函数内参数设置为1,表示同时最多接受1个客户端的连接。 

5.等待客户端连接

这里使用accept方法,这是一个阻塞方法:如果没有连接,则后续的代码皆不执行~

conn, addr = socket_server.accept()

accept返回的是一个二元元组:

  • conn:客户端和服务端的连接对象
  • address:客户端的地址信息

测试连接情况:

print(f"Connected by: {addr}")

6.接受客户端信息

data:str = conn.recv(1024).decode('utf-8')
#类型注释,字符串型

recv接受的参数是缓冲区大小,这里一般给1024即可。此外其返回值为一个字节数组也即bytes对象,需要decode方法通过UTF-8编码,将字节数组转换为字符串对象~

print(f"message:{data}")

7.回复消息

msg=input("回复消息:").encode('utf-8')
conn.send(msg)

 input键入的是字符串对象,因此需要先编码为字节数组~

8.关闭链接

conn.close()
socket_server.close()

三.客户端开发

总的来说异曲同工,甚至更为简易:

import socket
socket_client= socket.socket()
socket_client.connect(('127.0.0.1', 1325))  #就是localhost,别犹豫
socket_client.send(bytes('Hello, client!', 'utf-8'))
recv_data=socket_client.recv(1024)
print(f"回复的消息是:{recv_data.decode('utf-8')}")
socket_client.close()

四.测试

将两个py文件都运行起来:

服务端已经收到了客户端发来的消息了,这时我们回复以后,客户端亦可正常收到~

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

人工智能(AI)系统化学习路线

一、为什么需要系统化学习AI? 人工智能技术正在重塑各行各业,但许多初学者容易陷入误区: ❌ 盲目跟风:直接学习TensorFlow/PyTorch,忽视数学与算法基础。 ❌ 纸上谈兵:只看理论不写代码,无法解…

mac calDAV 日历交互

安装Bakal docker https://sabre.io/dav/building-a-caldav-client/ 在Bakal服务器上注册账户 http://localhost:8080/admin/?/users/calendars/user/1/ 在日历端登录账户: Server: http://127.0.0.1:8080/dav.php Server Path: /dav.php/principals/lion No e…

手机号登录与高并发思考

基础逻辑 一般来说这个验证码登录分为手机号、以及邮箱登录 手机号短信验证,以腾讯云SMS 服务为例: 这个操作无非对后端来说就是两个接口: 一个是获取验证码,这块后端生成6位数字expire_time 去推送到腾讯云sdk ,腾…

Python设计模式 - 适配器模式

定义 适配器模式(Adapter Pattern)是一种结构型设计模式,它用于将一个类的接口转换为客户端所期待的另一个接口。 注:在适配器模式定义中所提及的接口是指广义的接口,它可以表示一个方法或者一组方法的集合。 结构 …

【前端工程化】

目录 前端工程户核心技术之模块化前端模块化的进化过程commonjs规范介绍commonjs规范示例commonjs模块打包 amd规范、cmd规范前端工程化关键技术之npmwebpack原理 前端工程户核心技术之模块化 前端模块化是一种标准,不是实现。commonjs是前端模块化的标准&#xff…

关于CNN,RNN,GAN,GNN,DQN,Transformer,LSTM,DBN你了解多少

以下是神经网络中常见的几种模型的简要介绍: 1. ​CNN (Convolutional Neural Network, 卷积神经网络) ​用途: 主要用于图像处理和计算机视觉任务。​特点: 通过卷积核提取局部特征,具有平移不变性,能够有效处理高维数据(如图像…

T113-i开发板的休眠与RTC定时唤醒指南

​​在嵌入式系统设计中,休眠与唤醒技术是优化电源管理、延长设备续航的关键。飞凌嵌入式基于全志T113-i处理器开发设计的OK113i-S开发板提供了两种休眠模式:freeze和mem,以满足不同应用场景下的功耗与恢复速度需求。本文将详细介绍如何让OK1…

SpringBoot项目实战(初级)

目录 一、数据库搭建 二、代码开发 1.pom.xml 2.thymeleaf模块处理的配置类 3.application配置文件 4.配置(在启动类中) 5.编写数据层 ②编写dao层 ③编写service层 接口 实现类 注意 补充(注入的3个注解) 1.AutoWir…

高性能网络SIG双月动态:加速 SMC eBPF 透明替换特性上游化进程,并与上游深度研讨新特性

01、整体进展 本次双月报总结了 SIG 在 1 月和 2 月的工作进展,工作聚焦在 ANCK CVE 和稳定性问题修复,以及上游 SMC eBPF 透明替换特性推进和多个话题讨论上。 本月关键进展: 1. 推进 SMC eBPF 透明替换特性上游化,更新至 V7&…

某视频的解密下载

下面讲一下怎么爬取视频,这个还是比小白的稍微有一点绕的 首先打开网址:aHR0cDovL3d3dy5wZWFydmlkZW8uY29tL3BvcHVsYXJfNA 首页 看一下: 有一个标题和一个href,href只是一个片段,待会肯定要拼接, 先找一…

C++继承机制:从基础到避坑详细解说

目录 1.继承的概念及定义 1.1继承的概念 1.2 继承定义 1.2.1定义格式 1.2.2继承关系和访问限定符 1.2.3继承基类成员访问方式的变化 总结: 2.基类和派生类对象赋值转换 3.继承中的作用域 4.派生类的默认成员函数 ​编辑 默认构造与传参构造 拷贝构造&am…

测试基础入门

文章目录 软件测试基础1.1软件测试概述什么是软件测试什么是软件需求说明书软件测试的原则测试用例的设计测试用例设计的基本原则软件测试分类软件缺陷的定义 2.1软件开发模型软件开发模型概述大爆炸模型(边写边改)软件开发生命周期模型--螺旋模型软件开…

022-spdlog

spdlog 以下是从原理到代码实现的全方位spdlog技术调研结果,结合核心架构、优化策略和完整代码示例: 一、核心架构设计原理 spdlog三级架构 (图示说明:spdlog采用三级结构实现日志系统解耦) Registry管理中枢 全局…

STM32时钟树

时钟树 时钟树就是STM32中用来产生和配置时钟,并且把配置好的时钟发送到各个外设的系统,时钟是所有外设运行的基础,所以时钟也是最先需要配置的东西,在程序中主函数之前还会执行一个SystemClock_Config()函数,这个函数…

【第22节】windows网络编程模型(WSAAsyncSelect模型)

目录 引言 一、WSAAsyncSelect模型概述 二、WSAAsyncSelect模型流程 2.1 自定义消息 2.2 创建窗口例程 2.3 初始化套接字 2.4 注册网络事件 2.5 绑定和监听 2.6 消息循环 三、完整示例代码 引言 在网络编程的广袤天地中,高效处理网络事件是构建稳定应用的…

利用Dify编制用户问题意图识别和规范化回复

继上一篇文章,成功完成Dify本地部署后,主要做了一些workflow和Agent的应用实现,整体感觉dify在工作流可视化编排方面非常好,即使部分功能无法实现,也可以通过代码执行模块或者自定义工具来实现(后续再具体分…

双核锁步技术在汽车芯片软错误防护中的应用详解

摘要 本文深入探讨了双核锁步技术在保障汽车芯片安全性中的应用。文章首先分析了国产车规芯片在高安全可靠领域面临的软错误难点及攻克方向,然后详细介绍了双核锁步技术的基本原理及其在汽车芯片防软错误的重要性。通过对比国内外多家厂商的芯片技术,分析…

Lustre 语言的 Rust 生成相关的工作

目前 Lustre V6 编译器支持编译生成的语言为C语言。但也注意到,以 Rust 语言为生成目标语言,也存在若干相关工作。 rustre(elegaanz) 该项工作为 Lustre v6 语言的解析器,使用 Rust 语言实现。生成 Lustre AST。 项…

Java 之「单调栈」:从入门到实战

Java 单调栈:从入门到实战 文章目录 Java 单调栈:从入门到实战引言什么是单调栈?单调递增栈单调递减栈 单调栈的应用场景Java 实现单调栈代码示例:下一个更大元素代码解析 单调栈的优势实战应用:股票价格跨度代码示例代…

【Golang】defer与recover的组合使用

在Go语言中,defer和recover是两个关键特性,通常结合使用以处理资源管理和异常恢复。以下是它们的核心应用场景及使用示例: 1. defer 的应用场景 defer用于延迟执行函数调用,确保在函数退出前执行特定操作。主要用途包括&#xff…