news 2026/9/3 15:41:55

python网络编程: socket服务端与客户端开发

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
python网络编程: socket服务端与客户端开发

文章目录

  • socket
      • 服务端和客户端
  • Socket 服务端编程
      • 创建socket对象
      • 绑定socket_server 到指定的IP和地址
      • 服务端开始监听端口
      • 接受客户端连接, 获得连接对象
        • 客户端返回连接之后, 通过 recv 方法, 接受客户端发送的消息
      • 通过conn (客户端当次连接对象), 调用send 方法可以回复消息
      • conn (客户端当次连接对象)和socket_server对象调用close方法, 关闭连接
  • Socket 客户端编程
      • 创建Socket 对象
      • 连接到服务端
      • 发送消息
      • 接收返回信息
      • 关闭链接

socket

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

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

服务端和客户端

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

Socket服务端: 等待其他进程的连接, 可以接受发来的消息, 可以回复消息

Socket客户端: 主动连接服务端, 可以发送消息, 可以接受回复

Socket 服务端编程

socket服务端开发主要分为以下几个步骤 :

创建socket对象

importsocket socket_server=socket.socket()

绑定socket_server 到指定的IP和地址

socket_server.bind(host,port)

服务端开始监听端口

socket_server.listen(backlog)

这里的backlog 为 int 整数, 表示允许的连接数量, 超出会等待, 可以不填, 不填会自动设置一个合理值

接受客户端连接, 获得连接对象

conn,address=socket_server.accept()print(f"接收到客户端连接, 来自:{address}")

accept()方法是阻塞方法, 如果没有连接, 会卡在当前这一行不向下执行

accept 放回的是一个二元元组, 可以使用上述形式, 用两个变量接收二元元组 2 个元素

客户端返回连接之后, 通过 recv 方法, 接受客户端发送的消息
whileTrue:data=conn.recv(1024).decode("utf-8")ifdata=='exit':breakprint("接收到发送来的数据: ",data)

recv 方法的返回值是字节数组, 可以通过 decode 使用 UTF-8 解码为字符串

recv 方法的传参是 buffsize, 缓冲区大小, 一般设置为 1024

可以通过 while True 无限循环来持续和客户端进行数据交互

可以通过判定客户端发来的特殊标记, 如 exit , 来退出循环

通过conn (客户端当次连接对象), 调用send 方法可以回复消息

conn.send("返回的消息".encode("utf-8"))

conn (客户端当次连接对象)和socket_server对象调用close方法, 关闭连接

conn.close()

完整代码如下:

importsocket# 创建socket对象socket_server=socket.socket()# 绑定I地址和P端口socket.server.bind(("localhost",8888))# 监听端口socket_server.listen(1)# 表示允许的连接数量# 等待客户端连接# result: tuple = socket_server.accept()# conn = result[0] # 客户端与服务端的连接对象# address = result[1] # 客户端的地址信息# 等价于:conn,address=socket_server.accept()# accept 返回的是一个二元元组 (连接对象, 地址信息)# accept 是一个阻塞方法, 如果没有连接, 就不会向下执行print(f"接受到信息来自:{address}")whileTrue:# 接受客户信息, 要使用客户端与服务端的本次连接对象, 而不是 socket_server对象data:str=conn.recv().decode("utf-8")# recv 接收参数缓冲区大小, 一般给 1024# 返回的是一个字节数组, bytes 对象, 不是字符串, 可以通过encode方法通过"utf-8"编码,将字节数组转换为字符串对象print("接收到的信息: ",data)# 输入回复消息msg=input().encode("utf-8")# 设置结束标志ifmsg=="exit":break# 发送回复消息conn.send(msg)# 关闭连接conn.close()# 关闭客户端的通讯连接socket_server.close()

Socket 客户端编程

socket 客户端编程主要分为以下几个步骤:

创建Socket 对象

importsocket socket_client=socket.socket()

连接到服务端

socket_client.connect(("localhost",8888))

发送消息

whileTrue:send_msg=input("请输入要发送的消息: ")# 设置停止标志ifsend_msg=="exit":breaksocket_client.send(send_msg.encode("utf-8"))

发送和传输的信息都是以字节数组的形式传输的, 以 UTF-8 编码即可

接收返回信息

recv_msg=socket_client.recv(1024)print(recv_msg.decode("utf-8"))

recv 是阻塞式的, 即接收不到返回, 就卡在这里等待

接收的信息需要通过 UTF-8 编码为字符串

关闭链接

socket_client.close()

具体代码如下:

importsocket socket_client=socket.socket()socket_client.connect(("localhost",8888))whileTrue:send_msg=input("请输入要发送的消息: ")# 设置停止标志ifsend_msg=="exit":breaksocket_client.send(send_msg.encode("utf-8"))recv_msg=socket_client.recv(1024)# recv 是阻塞式的, 即接收不到返回, 就卡在这里等待print(recv_msg.decode("utf-8"))# 接收的信息需要通过 UTF-8 编码为字符串# 关闭链接socket_client.close()
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/3 15:39:37

模型看见什么,由程序决定:读 claude-cookbooks/multimodal

multimodal/ 前几篇介绍怎样传图片、识别文字、读取图表和处理多页文档。单独看都像 API 教程,直到 crop_tool.ipynb 才把共同的问题说清:图片已经传给模型,不代表图中的信息已经进入模型可判断的尺度。 视觉调用会把图片压进有限的视觉 toke…

作者头像 李华
网站建设 2026/9/3 15:34:44

ls查看atime,ctime,mtime

ls命令可以用来查看文件的atime,ctime,mtime。1、如果我们利用的是ls -l来查看文件的状态的话,那么此时文件的显示时间是modify的时间。2、ls -lc 显示的时间是change时间。3、ls -ltu 按照访问时间排序并显示。4、ls -lt 按照修改时间排序。

作者头像 李华
网站建设 2026/9/3 15:31:24

Grok Voice 2.0本地部署与语音转字幕实战指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/3 15:30:30

智能眼镜实测:是手机替代品还是场景效率工具?

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/3 15:30:27

Hadoop实战:从美团外卖数据解构分布式计算业务价值

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/3 15:27:51

2026年7月昆明市新房价格深度分析报告

一、报告摘要本报告基于2026年7月昆明市新房市场实际成交案例,从成交价格、区域分布、户型结构、价格走势等维度进行深度分析。数据显示,2026年7月昆明市新房成交均价为每平方米12860元,环比上涨1.2%,同比上涨3.8%。其中&#xff…

作者头像 李华