通过套接字发送文件

2023-12-15

我在将数据作为文件从套接字的一端发送到另一端时遇到问题。发生的情况是服务器和客户端都试图读取该文件,因此该文件永远不会被发送。我想知道如何让客户端阻塞,直到服务器完成读取客户端发送的文件。

我使用发送和接收来处理原始数据包,但我认为这是一个更干净的解决方案......

Client:

  1. 连接到服务器创建套接字连接
  2. 在套接字上创建文件并发送数据
  3. 等待来自服务器的文件

Server:

  1. 等待来自客户端的文件

完整互动:

  1. 客户端向服务器发送数据
  2. 服务器向客户端发送数据

Edit

我实际上正在查看的代码已发布在这个问题中,但我认为 Eventlet 的东西吓到了人们......https://stackoverflow.com/questions/2909358/eventlet-client-server

在它的下面只是使用Python套接字,所以我想我应该简化问题并只询问核心套接字问题......


听起来好像您让客户端发送文件,然后等待服务器响应,但是如果您不向服务器表明它已完全读取文件,则服务器端的recv()将挂起等待更多数据。客户端完成发送后,您可以在客户端调用 shutdown(SHUT_WR)。这通知服务器一旦读取了发送的所有数据,就不再有任何数据了。

一个非常基本的示例(向服务器发送一个数据 blob 并接收一个数据 blob 作为响应):

server

>>> from socket import *
>>> s=socket()
>>> s.bind(('',8000))
>>> s.listen(1)
>>> c,a = s.accept()  # will hang here until a client connects
>>> recvd=''
>>> while True:
...  data = c.recv(1024)
...  if not data: break # recv() will return '' only if the client calls shutdown(SHUT_WR) or close()
...  recvd += data
...
>>> recvd
'a message'
>>> c.sendall('a response')
>>> c.close()  # done with client, could loop back to accept here
>>> s.close()  # done with server

client

>>> from socket import *
>>> s=socket()
>>> s.connect(('localhost',8000))
>>> s.sendall('a message')
>>> s.shutdown(SHUT_WR)  # tells server you're done sending, so recv won't wait for more
>>> recvd=''
>>> while True:
...  data = s.recv(1024)
...  if not data: break
...  recvd += data
...
>>> recvd
'a response'
>>> s.close()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

通过套接字发送文件 的相关文章

  • 对卡在 CLOSE_WAIT 状态的连接进行故障排除

    我有一个在 Windows 上的 WebLogic 11g 中运行的 Java 应用程序 几天后它变得没有响应 我注意到的一个可疑症状是大量连接 大约 3000 个 出现在netstat即使服务器空闲 也具有 CLOSE WAIT 状态 由
  • 没有名为 crypto.cipher 的模块

    我现在正在尝试加密一段时间 我最近得到了这个基于 python 的密码器 名为PythonCrypter https github com jbertman PythonCrypter 我对 Python 相当陌生 当我尝试通过终端打开 C
  • Python 中的 Lanczos 插值与 2D 图像

    我尝试重新缩放 2D 图像 灰度 图像大小为 256x256 所需输出为 224x224 像素值范围从 0 到 1300 我尝试了两种使用 Lanczos 插值来重新调整它们的方法 首先使用PIL图像 import numpy as np
  • 使用 matplotlib 绘制时间序列数据并仅在年初显示年份

    rcParams date autoformatter month b n Y 我正在使用 matpltolib 来绘制时间序列 如果我按上述方式设置 rcParams 则生成的图会在每个刻度处标记月份名称和年份 我怎样才能将其设置为仅在每
  • Python - StatsModels、OLS 置信区间

    在 Statsmodels 中 我可以使用以下方法拟合我的模型 import statsmodels api as sm X np array 22000 13400 47600 7400 12000 32000 28000 31000 6
  • 使用 on_bad_lines 将 pandas.read_csv 中的无效行写入文件

    我有一个 CSV 文件 我正在使用 Python 来解析该文件 我发现文件中的某些行具有不同的列数 001 Snow Jon 19801201 002 Crom Jake 19920103 003 Wise Frank 19880303 l
  • python 相当于 R 中的 get() (= 使用字符串检索符号的值)

    在 R 中 get s 函数检索名称存储在字符变量 向量 中的符号的值s e g X lt 10 r lt XVI s lt substr r 1 1 X get s 10 取罗马数字的第一个符号r并将其转换为其等效整数 尽管花了一些时间翻
  • OpenCV 无法从 MacBook Pro iSight 捕获

    几天后 我无法再从 opencv 应用程序内部打开我的 iSight 相机 cap cv2 VideoCapture 0 返回 并且cap isOpened 回报true 然而 cap grab 刚刚返回false 有任何想法吗 示例代码
  • 如何加速Python中的N维区间树?

    考虑以下问题 给定一组n间隔和一组m浮点数 对于每个浮点数 确定包含该浮点数的区间子集 这个问题已经通过构建一个解决区间树 https en wikipedia org wiki Interval tree 或称为范围树或线段树 已经针对一
  • 如何使用 OpencV 从 Firebase 读取图像?

    有没有使用 OpenCV 从 Firebase 读取图像的想法 或者我必须先下载图片 然后从本地文件夹执行 cv imread 功能 有什么办法我可以使用cv imread link of picture from firebase 您可以
  • Flask如何获取请求的HTTP_ORIGIN

    我想用我自己设置的 Access Control Allow Origin 标头做出响应 而弄清楚请求中的 HTTP ORIGIN 参数在哪里似乎很混乱 我在用着烧瓶 0 10 1 以及HTTP ORIGIN似乎是这个的特点之一object
  • 使用 \r 并打印一些文本后如何清除控制台中的一行?

    对于我当前的项目 有一些代码很慢并且我无法使其更快 为了获得一些关于已完成 必须完成多少的反馈 我创建了一个进度片段 您可以在下面看到 当你看到最后一行时 sys stdout write r100 80 n I use 80覆盖最终剩余的
  • Pandas:merge_asof() 对多行求和/不重复

    我正在处理两个数据集 每个数据集具有不同的关联日期 我想合并它们 但因为日期不完全匹配 我相信merge asof 是最好的方法 然而 有两件事发生merge asof 不理想的 数字重复 数字丢失 以下代码是一个示例 df a pd Da
  • Conda SafetyError:文件大小不正确

    使用创建 Conda 环境时conda create n env name python 3 6 我收到以下警告 Preparing transaction done Verifying transaction SafetyError Th
  • 如何计算 pandas 数据帧上的连续有序值

    我试图从给定的数据帧中获取连续 0 值的最大计数 其中包含来自 pandas 数据帧的 id date value 列 如下所示 id date value 354 2019 03 01 0 354 2019 03 02 0 354 201
  • 使用其构造函数初始化 OrderedDict 以便保留初始数据的顺序的正确方法?

    初始化有序字典 OD 以使其保留初始数据的顺序的正确方法是什么 from collections import OrderedDict Obviously wrong because regular dict loses order d O
  • Python 类继承 - 诡异的动作

    我观察到类继承有一个奇怪的效果 对于我正在处理的项目 我正在创建一个类来充当另一个模块的类的包装器 我正在使用第 3 方 aeidon 模块 用于操作字幕文件 但问题可能不太具体 以下是您通常如何使用该模块 project aeidon P
  • Python Selenium:如何在文本文件中打印网站上的值?

    我正在尝试编写一个脚本 该脚本将从 tulsaspca org 网站获取以下 6 个值并将其打印在 txt 文件中 最终输出应该是 905 4896 7105 23194 1004 42000 放置的动物 的 HTML span class
  • 如何将输入读取为数字?

    这个问题的答案是社区努力 help privileges edit community wiki 编辑现有答案以改进这篇文章 目前不接受新的答案或互动 Why are x and y下面的代码中使用字符串而不是整数 注意 在Python 2
  • Statsmodels.formula.api OLS不显示截距的统计值

    我正在运行以下源代码 import statsmodels formula api as sm Add one column of ones for the intercept term X np append arr np ones 50

随机推荐

  • 如何使用 Tesseract 提高图像质量以从图像中提取文本

    我试图在下面的代码中使用 Tesseract 来提取图像的两行 我尝试提高图像质量 但没有成功 谁能帮我 from PIL import Image ImageEnhance ImageFilter import pytesseract i
  • VB6 中的运行时错误堆栈跟踪或位置

    我维护一个用 VB6 编写的旧应用程序 在客户端环境中 它会引发运行时错误 我无法在调试器下重现该错误 有什么方法可以获取堆栈跟踪或错误位置吗 我的意思是 不要在代码中放置跟踪语句 例如here或添加错误处理程序以记录每个过程 例如here
  • 如何在 Mac 上将 adb 与 genymotion 结合使用?

    我正在 Mac OS X 10 9 4 上使用 cordova 构建 Android 应用程序 我正在使用 genymotion 创建虚拟设备 昨天 我能够获得 cordova run android 让我的应用程序在 genymotion
  • 反射不适用于 Android 发布的 apk。即使禁用了 proguard/minify

    目前我面临一个奇怪的问题 我的应用程序的发布 apk 抛出 NoSuchFieldExceptions 它在调试 apk 上运行良好 我试图获取的字段是 android widget 打包的 我还努力启用 proguard 并在 progu
  • 如何更改自定义子面板中的默认排序 - Sugarcrm?

    我想在自定义面板中按 创建日期 进行默认排序 您能指导我吗 如何将其设为 创建日期 作为默认排序 请帮我 In your layout defs改变sort by到所需的列 在此示例中 用于排序的默认列是date entered
  • jinja2 如何删除日期时间中的微秒

    在 Jinja2 模板中 我想显示最后一次登录 Last Login user last seen last seen应该是 sqlite 中的日期时间对象 它总是给我这样的东西 2014 07 27 23 09 36 467761 在模板
  • 卡桑德拉更新专栏

    我如何更新 cassandra 数据库中的列 columnfam username name edds surname surname email email protected 例如我需要更新姓氏 我使用 PHP 客户端 PHPCASSA
  • 当函数是 lambda 或嵌套函数时,concurrent.futures.ProcessPoolExecutor 会挂起

    任何人都可以深入了解为什么使用 lambda 或嵌套函数 f 将使concurrent futures ProcessPoolExecutor挂在下面的代码示例中吗 import concurrent futures def f2 s re
  • 为什么 postgres 的日期范围上限函数返回独占边界?

    我为这篇文章创建了一个 sql 小提琴 http sqlfiddle com 15 7b5d7 1 0 问题 1 为什么插入一条记录时会出现daterange具有独占边界的实际上存储了具有包含下限和独占上限的范围 为什么 pg 不将它们都存
  • C 函数分配不正确的浮点值

    我试图返回一个浮点值并将其分配给一个浮点变量 但新浮点值与返回的值不同 float getVoltageReading return 1 2f void updateUIReadings uint8 t menuID float integ
  • IOS 10 宽色:我需要担心吗?

    The 发行说明iOS 10 有一个标题为广色域 让我感到困惑的是这一行 如果您的应用程序依赖 UIKit 来限制组件值 无论您是创建颜色还是询问颜色的组件值 则在链接到 iOS 10 时 您需要更改应用程序的行为 钳位元件值是什么意思 这
  • 无法找到或加载主类 org.gradle.wrapper.GradleWrapperMain

    我通过删除本地目录来清理整个项目 例如 gradle m2 android and workspace project gradle并选择File gt Invalidate Caches Restart 在 Android Studio
  • 地理编码 API 超出速率限制

    我正在使用地理编码 API 来查询一组 10 万用户的位置坐标 但是 由于速率限制 我每天无法触发超过 2500 个请求 为了我的学习目的 我需要不受限制的访问 这是我大学的一个项目 有人可以引导我走向正确的方向吗 Per the 使用限制
  • 非委托类型的事件

    我已经实现了一个类似于此接口的类 ImmutableObject true public interface ICustomEvent void Invoke object sender EventArgs e ICustomEvent C
  • 增加 C/C++ 程序使用的(非堆栈)内存

    我正在具有 12 GB RAM 的 Windows 操作系统上运行内存密集型作业 根据我的计算 4 GB 内存应该足以运行该程序 我正在运行我用动态内存分配编写的程序 我有两个版本的 C 和 C 程序 malloc free and new
  • python参数类型提示支持嵌套类型信息吗?

    我有一个逻辑如下的函数 def computeProbability x i np array np int32 colProbabilities list dict string np float32 gt list double ret
  • AngularJs图像上传到S3

    I am 创建网络应用程序 带有 ng 文件上传功能的 AngularJS 前端 https github com danialfarid ng file upload Node js 后端 希望能够将图像上传到我的 Amazon S3 存
  • 如何在 Firefox 中打印 Iframe PDF?

    是的 我也看到了与此相关的其他问题 但它们没有帮助我 所以这是我的代码 raspe4atat click function ajax url raspe4atat type GET success function ajax url ifr
  • “R”包“ranger”中的“最大深度”相当于什么?

    其他随机森林工具具有限制特定分支上的最大分割深度的 刻度盘 例如 h2o randomForest 具有 max 深度 游侠 的版本是什么 我不熟悉h2o randomForest包 但我对随机森林的一般理解是 每棵树都会生长 直到树的每片
  • 通过套接字发送文件

    我在将数据作为文件从套接字的一端发送到另一端时遇到问题 发生的情况是服务器和客户端都试图读取该文件 因此该文件永远不会被发送 我想知道如何让客户端阻塞 直到服务器完成读取客户端发送的文件 我使用发送和接收来处理原始数据包 但我认为这是一个更