python socket编程

socket

socket(套接字)是进程间通信的工具,好比现实生活中的插座,所有家电想要工作都是基于插座进行,进程之间想要进行网络通信需要socket

socket负责进程之间的网络数据传输,好比数据的搬运工

image-20240927154726240

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

socket服务端:等待其他进程的连接、可接收发来的消息、可以回复消息

socket客户端:主动连接服务端、可以发送消息、可以接收回复

socket服务端编程

主要分为以下几步:

#1.创建socket对象
import socket
socket_server = socket.socket()#2.绑定socket_server到指定ip和地址
socket_server.bind((host,port))#3.服务端开始监听端口
socket_server.listen(backlog)
#backlog为int整数,表示允许的连接数量,超过会等待#4.接收客户端连接,获得连接对象
conn,address = socket_server.accept()
print(f"接收到客户端连接,连接来自:{address}")
"""accept方法是阻塞方法,如果没有连接,会卡在这里"""#5.客户端连接后,通过recv方法,接收客户端发来的消息
while True:data = conn.recv(1024).decode("utf-8")#recv方法的返回值是字节数组(bytes),可以通过decode使用utf-8解码为字符串#recv方法的传参是buffsize,缓冲区大小,一般设置为1024if data == 'exit':breakprint("接收到发来的消息:",data)#6.通过conn(客户端当次连接对象),调用send方法可以回复消息conn.send("你好".encode("utf-8"))#7.conn和socket_server对象调用close方法,关闭连接
conn.close()
socket_server.close()

socket客户端编程

主要分为以下几个步骤:

# 1.创建socket对象
import socketsocket_client = socket.socket()
# 2.连接到服务端
socket_client.connect(("localhost", 8888))
# 3.发送消息
while True:send_msg = input("请输入要发送的消息:")if send_msg == "exit":breaksocket_client.send(send_msg.encode("utf-8"))# 4.接收服务端返回的消息recv_data = socket_client.recv(1024)print("服务端回复的消息为:", recv_data.decode("utf-8"))# 5.关闭连接
socket_client.close()

完整代码

server.py

# 1.创建socket对象
import socketsocket_server = socket.socket()# 2.绑定socket_server到指定ip和地址
socket_server.bind(("localhost", 8888))# 3.服务端开始监听端口
socket_server.listen(1)
# backlog为int整数,表示允许的连接数量,超过会等待# 4.接收客户端连接,获得连接对象
conn, address = socket_server.accept()
print(f"接收到客户端连接,连接来自:{address}")
"""accept方法是阻塞方法,如果没有连接,会卡在这里"""# 5.客户端连接后,通过recv方法,接收客户端发来的消息
while True:data = conn.recv(1024).decode("utf-8")# recv方法的返回值是字节数组(bytes),可以通过decode使用utf-8解码为字符串# recv方法的传参是buffsize,缓冲区大小,一般设置为1024if data == 'exit':breakprint("接收到发来的消息:", data)# 6.通过conn(客户端当次连接对象),调用send方法可以回复消息send_str = input("回复客户端:").encode("utf-8")conn.send(send_str)# 7.conn和socket_server对象调用close方法,关闭连接
conn.close()
socket_server.close()

client.py

# 1.创建socket对象
import socketsocket_client = socket.socket()
# 2.连接到服务端
socket_client.connect(("localhost", 8888))
# 3.发送消息
while True:send_msg = input("请输入要发送的消息:")if send_msg == "exit":breaksocket_client.send(send_msg.encode("utf-8"))# 4.接收服务端返回的消息recv_data = socket_client.recv(1024)print("服务端回复的消息为:", recv_data.decode("utf-8"))# 5.关闭连接
socket_client.close()

image-20240927162430509

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

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

相关文章

动态规划入门题目->使用最小费用爬楼梯

1.题目: 2.解析: 做题模式: 步骤一:找状态转移方程 步骤二:初始化 步三:填表 步骤四:返回-> dp[n] dp[i]表示到达 i 位置最小花费 逻辑:要爬到楼顶先找到 i 位置 , 要…

高通Android 12 push framework.jar和service.jar

1、Android framework.jar和service.jar替换注意事项 2、单编 adb push service.jar脚本 如下 adb root adb disable-verity adb remountadb push services.jar system/framework adb push services.jar.prof system/framework adb push oat/arm64/services.art /system/fram…

SpringBoot日志集成-LogBack

Log4J:最早的Java日志框架之一,由Apache基金会发起,提供灵活而强大的日志记录机制JDK自带的日志框架:java.util.logging.Logg,是JDK1.4之后提供的日志API,已淘汰logback: logback一个开源的日志…

delphi制作漂亮的农历窗体(IntraWeb+Layui的完美结合)

delphi制作漂亮的农历窗体(IntraWebLayui的完美结合) 不需要安装服务器,Apache和IIS都不需要,自带企业级服务器。 运行exe服务器就架好了,直接打开手机浏览器或者电脑浏览器,网页就出来了,如果…

sqli-lab靶场学习(四)——Less11-14(post方法)

前言 第1-10关都是get方法,本关开始进入post方法。其实post也好get也好,本质都差不多,使用的技巧也基本相同。 Less11 第11关打开是一个输入用户名密码的界面 显然登陆对话框会使用post方式提交,这里我们尝试在Username一栏通过…

时序预测 | Python实现KAN+LSTM时间序列预测

时序预测 | Python实现KAN+LSTM时间序列预测 目录 时序预测 | Python实现KAN+LSTM时间序列预测预测效果基本介绍程序设计预测效果 基本介绍 时序预测 | KAN+LSTM时间序列预测(Python) KAN作为这两年最新提出的机制,目前很少人用,很适合作为时间序列预测的创新点,可以结合…

CSS01-语法规范、基础选择器

一、CSS语法规范 示例: 二、CSS的基础选择器 选择器(选择符)就是根据不同需求把不同的标签选出来这就是选择器的作用。 简单来说,就是选择标签用的。 选择器的分类: 1、标签选择器 2、类选择器(开发最常用) 长字符命名…

误差不到1毫米的WGS84与CGCS2000坐标转换工具

我们在《WGS84与CGCS2000坐标的精密转换方法》一文中为你分享了一个WGS84与CGCS2000坐标的精密转换纯理论性的方法。 现在,再为你分享一个据说是误差不到1毫米的WGS84与CGCS2000坐标的转换工具,请从文末查看该工具的领取方法。 WGS84与CGCS2000坐标转换…

信息学奥赛的最佳启蒙阶段是小学还是初中?

信息学奥赛(NOI)近年来越来越受家长和学生的关注,尤其是在编程教育不断升温的背景下,信息学竞赛成为了许多家庭的教育选择之一。家长们往往关心的是:孩子应该在什么年龄段开始接触信息学竞赛,才能打下坚实的…

如何让 Android 的前端页面像 iOS 一样“优雅”?

作者:方英杰(崇之) 最近在调研前端页面适配 Android 端异形屏的方案,调研过程中发现了一些比较有意思的点,本文主要是做一个总结。 一、提出问题 首先,我们需要知道 Android 上的前端适配面临着什么问题。 问题其实很…

台式机通过笔记本上网

概述: ①将wifi共享给网口 ②网口配置成自协商IP和DNS即可 一、背景 由于台式机只有网口,没得wifi网卡,因此想通过笔记本连wifi,再通过网线将笔记本和台式机连接起来,从而实现台式机通过笔记本的wifi上网,即让笔记本当台式机的…

实现org.springframework.beans.factory.InitializingBean 接口--初始化bean

1、案例 import com.dzwl.easy.report.core.service.IUserDescService; import org.springframework.beans.factory.InitializingBean; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component;Component public c…

大厂太卷了!又一款一站式AI短剧创作神器,这套AI工作流厉害了:自动生成脚本、角色、分镜、视频、音乐、字幕...(附保姆级教程)

大家好,我是程序员X小鹿,前互联网大厂程序员,自由职业2年,也一名 AIGC 爱好者,持续分享更多前沿的「AI 工具」和「AI副业玩法」,欢迎一起交流~ 行业在卷 AI 应用,而美图已经在卷 AI 工作流了………

【SpringBoot详细教程】-05-整合Druid操作数据库【持续更新】

文末看往期系列教程:给个关注可好? 🌲 SpringData简介 对于数据访问层,无论是 SQL (关系型数据库) 还是 NoSql (非关系型数据库),Spring Boot 底层都是采用 Spring Data 的方式进行统一处理。 Spring Boot 底层都是采…

VS Code激活python虚拟环境常见报错

VS Code激活python虚拟环境常见报错 问题1:执行激活 activate 报错 问题1:执行激活 activate 报错 解决: Win X *执行 set-executionpolicy remotesigned 再输入 Y

CrossOver24支持的游戏有那些

CrossOver刚刚更新了24版本,支持《地平线零之曙光》、《以撒的结合:重生》等游戏。一起来看看它有哪些更新吧! 一、功能优化 - 更新 Wine 至最新的稳定版 Wine 9.0,引入了 7000多个更新和针对各种软件游戏的优化。 - 更新 Wine M…

动静态库(Linux)

文章目录 前言一、静态库二、动态库三、深入理解动态库总结 前言 我们之前用过c语言的库.Linux中默认的都是使用动态库,如果想要使用静态库,就必须加上-static选项。默认都是安装的动态库,系统中一般没有静态库,如果要使用&#…

注册安全分析报告:闪送

前言 由于网站注册入口容易被黑客攻击,存在如下安全问题: 暴力破解密码,造成用户信息泄露短信盗刷的安全问题,影响业务及导致用户投诉带来经济损失,尤其是后付费客户,风险巨大,造成亏损无底洞…

用户态缓存:链式缓冲区(Chain Buffer)

目录 链式缓冲区(Chain Buffer)简介 为什么选择链式缓冲区? 代码解析 1. 头文件与类型定义 2. 结构体定义 3. 宏定义与常量 4. 环形缓冲区的基本操作 5. 其他辅助函数 6. 数据读写操作的详细实现 7. 总结 8. 结合之前的内容 9. 具…

C~排序算法

在C/C中,有多种排序算法可供选择,每种算法都有其特定的应用场景和特点。下面介绍几种常用的排序算法,包括冒泡排序、选择排序、插入排序、快速排序、归并排序和堆排序,并给出相应的示例代码和解释。 冒泡排序(Bubble …