python套接字(一):socket的使用

news2024/9/25 15:21:29

文章目录

  • 前言
  • 一、什么是套接字?
  • 二、python中套接字的常用方法
  • 三、使用
    • 1、服务器端代码
    • 2、客户端代码


前言

最近研究了一下python的socket的使用,特此记录下来,方便以后参考。

一、什么是套接字?

套接字(Socket),就是对网络中不同主机上的应用进程之间进行双向通信的端点的抽象。一个套接字就是网络上进程通信的一端,提供了应用层进程利用网络协议交换数据的机制。它们使在两个不同程序或设备之间的信息传输成为可能。

二、python中套接字的常用方法

方法名描述
socket.socket()用于创建套接字(服务器和客户端都需要创建套接字
socket.accept()用于接受连接。它返回一对值(conn,address),其中conn是用于发送或接收数据的新套接字对象,而address连接另一端存在的套接字的地址
socket.bind()用于绑定到指定为参数的地址(用于服务器端)
socket.close()用于将套接字标记为已关闭
socket.connect()用于连接到指定为参数的远程地址
socket.listen()使服务器能够接受连接(用于服务器端)

三、使用

目标:创建一个简单的套接字应用,客户端发送一条数据个服务器端,服务器端收到信息后,返回一条数据给客户端。

1、服务器端代码

socket_server.py

"""
展示Socket服务器开发
"""
import socket

# 创建Socket对象
socket_server = socket.socket()

# 绑定ip地址和端口
socket_server.bind(("localhost", 8888))

# 监听端口,参数表示接受的链接数量
socket_server.listen(2)

# 等待客户端信息,accept()是阻塞方法,等待客户端链接;没有链接会一直等待
conn, address = socket_server.accept()
print(f"接收到了客户端的链接,客户端的信息是:{address}")

while True:
    # 接受客户端信息,要使用客户端和服务端本次的链接对象
    # recv接受的参数是缓冲区大小,一般为1024
    # recv方法返回的是一个字节数组也就是byte对象,不是字符串,可以通过decode方法使用UTF-8编码,将字节数组转换为字符串对象
    data = conn.recv(1024).decode("UTF-8")
    print(f"客户端发来的消息是:{data}")

    # 发送回复消息
    msg = input("请输入你要和客户端回复的消息:").encode("UTF-8")   # encode可以将字符串编码为字节数组
    conn.send(msg)

# 关闭链接
conn.close()
socket_server.close()

2、客户端代码

socket_client.py

"""
演示Socket客户端开发
"""
import socket

# 创建socket对象
socket_client = socket.socket()

# 连接服务器
socket_client.connect(("localhost", 8888))

while True:
    # 发送消息
    msg = input("请输入你要发送的消息:")
    if msg == "exit":
        break
    socket_client.send(msg.encode("UTF-8"))
    # 接收返回消息
    recv_data = socket_client.recv(1024).decode("UTF-8")
    print(f"服务端回复的消息是:{recv_data}")

# 关闭链接
socket_client.close()

然后分别运行这两个代码(先运行服务器端)检验一下:
客户端:
在这里插入图片描述
服务器端:
在这里插入图片描述
可以看到,确实能够通信。

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

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

相关文章

线上展览平台平台有哪些?蛙色3D虚拟展厅平台简介

导语: 随着科技的飞速发展和全球化的趋势,线上展览平台正日益受到关注和重视。它们成为了传统展览方式的有力补充,为各行业提供了一个全新的展示和交流平台。 我们将一起探索当今主流的线上展览平台,并重点介绍蛙色3D虚拟展厅平台…

jmeter如何将上一个请求的结果作为下一个请求的参数

目录 1、简介 2、用途 3、下载、简单应用 4、如何将上一个请求的结果作为下一个请求的参数 1、简介 在JMeter中,可以通过使用变量来将上一个请求的结果作为下一个请求的参数传递。 ApacheJMeter是Apache组织开发的基于Java的压力测试工具。用于对软件做压力测…

网络安全(黑客)怎么自学?

最近看到很多问题,都是小白想要转行网络安全行业咨询学习路线和学习资料的,作为一个培训机构,学习路线和免费学习资料肯定是很多的。机构里面的不是顶级的黑阔大佬就是正在学习的同学,也用不上这些内容,每天都在某云盘…

Win10系统怎么设置滑动打开组合框?

Win10系统怎么设置滑动打开组合框?Win10系统戏中用户想要设置一下滑动打开组合框,但不知道怎么操作,用户需要打开Win10系统的高级系统设置选项,点击高级选项找到视觉效果选项,勾选滑动打开组合框选项保存即可。 解决方…

Unity入门3——脚本基础

一、生命周期函数 ​ 所有继承 MonoBehavior 的脚本,最终都会挂载到 GameObject 游戏对象上 ​ 生命周期函数就是该脚本对象依附的 GameObject 对象从出生到消亡整个生命周期中 ​ 会通过反射自动调用的一些特殊函数 ​ Unity 帮助我们记录了一个 GameObject 对象依…

OpenShift Route 的实现原理

OpenShift Route 的实现原理 OpenShift 如何使用 HAProxy 实现 Router 和 RouteRouter appHAProxy 配置1. HTTP2. HTTPS OpenShift 中的 Route 解决了从集群外部访问服务的需求,与 Kubernetes 中的 Ingress 类似。 OpenShift 中 Route 资源 API 定义如下&#xff1…

解剖学关键点检测方向论文翻译和精读:基于热力图回归的CNN融入空间配置实现关键点定位

解剖学关键点检测方向论文翻译和精读:Integrating spatial configuration into heatmap regression based CNNs for landmark localization Abstract: In many medical image analysis applications, only a limited amount of training data is available due to t…

Pyinstaller 打包 paddle出现的问题

目录 问题解决方法 1.找到自己项目所需要的包 2.使用【auto-py-to-exe】库,添加对应项目对应的包 --add-data 需要添加的文件 --hidden-import 需要添加的文件 问题来源 问题解决思路 问题解决方法 1.找到自己项目所需要的包 这里可以参考博主的另外一篇文章&…

大模型当私人法律顾问?北大团队推出法律大模型,数据与模型全部开源!

作者 | 小戏、Python “要是我有一个学法的朋友就好了” 法律作为我们社会生活的最高指引,其重要性毋庸多言。然而类似于医学,法律又是一个入行门槛非常高的专业领域,想想通过率不到 10% 的法考,显然遇到法律相关的专业问题不太支…

mysql中SQL语句查询字段相加的和,以及更改小数精确位。和查询SQL语句结果相减的SQL查询

最近在工作中碰到了SQL进行查询,用户缴费以及退费信息的工作,以及查询完后需要修改SQL结果后小数位的需求,整理结果如下: 首先,看内容: 如图,operate_type代表缴费与退费,分别用0和1区别。 #…

快速教你如何使用postman工具进行接口测试?(配置全局token、JWT可用)

现在很多人都在使用前后端分离进行项目开发,那在后端开发过程中使用postman测试工具可快速便捷完成接口测试。但是在测试过程中,很多人发现因为JWT的鉴权,导致半个小时就需要更新一下token,让我们的测试变得复杂。 若是将token作…

【JUC中的 “8锁现象” 】 —— 每天一点小知识

💧 J U C 中的“ 8 锁现象” \color{#FF1493}{JUC中的 “8锁现象” } JUC中的“8锁现象”💧 🌷 仰望天空,妳我亦是行人.✨ 🦄 个人主页——微风撞见云的博客🎐 🐳 《数据结构与算法》…

python基础学习3【NumPy矩阵与通用函数【矩阵相乘+平方+广播机制+转置】+ save、load、sort、repeat、unique、鸢尾花1】

NumPy矩阵与通用函数 a np.mat([[1,2],[3,4]])#生成矩阵b np.matrix([[1,7],[6,4]])np.bmat("a b") 矩阵的运算 矩阵特有属性: 属性 说明 T自身转置H共轭转置I逆矩阵A自身数据的二维数据视图 例如: np.matrix(a).T 矩阵相乘:…

【Map集合的基本功能】

Map集合的基本功能 V put(K key,V value):添加元素 V remove(K key,V value):根据键删除键值对元素 package com.gather.map; //Map集合常用的基本功能 import java.util.HashMap; import java.util.Map; public class MapDemo02 {public static void m…

Flutter:路由、拦截返回事件、自定义独立路由

路由堆栈 Flutter 路由管理中有两个非常重要的概念: Route:路由是应用程序页面的抽象,对应 Android 中 Activity 和 iOS 中的 ViewController,由 Navigator 管理。Navigator:Navigator 是一个组件,管理和…

哈希表--想彻底了解哈希表,看这一篇文章就可以了

为了一次存储便能得到所查记录,在记录的存储位置和它的关键字之间建立一个确定的对应关系H,已H(key)作为关键字为key的记录在表中的位置,这个对应关系H为哈希(Hash)函数, 按这个思路建立的表为哈…

【Leetcode】 1071. 字符串的最大公因子

For two strings s and t, we say “t divides s” if and only if s t ... t (i.e., t is concatenated with itself one or more times). Given two strings str1 and str2, return the largest string x such that x divides both str1 and str2. Example 1: Input: s…

开发改了接口,经常忘通知测试的解决方案!

目录 前言: Apifox解决方案 Apifox对此给出的解决方案是: 用Apifox怎么处理接口变更 接口代码实现逻辑修改 接口参数修改 前言: 在开发过程中,接口变动十分频繁,测试人员没有及时获得相关通知的情况也很普遍。这…

这一次AI应该是真正的已经到来

渐渐感觉这一次AI的变革能真正的突破迷雾,迎来真正的人工智能时代的到来。所以写篇博文学习一下。经过半年的发酵与发展,不得不说AI已经成为了不可逆转的趋势。之所以说这一次AI应该是真正的已经到来,是因为人工智能的发展其实已经经历了几十…

【Python】一文带你了解 正则表达式 + 简单操作

作者主页:爱笑的男孩。的博客_CSDN博客-深度学习,活动,python领域博主爱笑的男孩。擅长深度学习,活动,python,等方面的知识,爱笑的男孩。关注算法,python,计算机视觉,图像处理,深度学习,pytorch,神经网络,opencv领域.https://blog.csdn.net/Code_and516?typeblog个…