使用 php 使用 socket_write 发送大数据包

2023-12-04

我正在尝试将图像编码为 base64 编码并将其发送到我正在创建的 C++ 服务器。我正在使用 PHP 来做到这一点。

因此,PHP代码是客户端,C++代码是监听服务器。

该问题出现在大图像上;例如 70KB 图像。它在小图像上工作正常;比如5KB。

发生的错误是:警告:socket_write() [function.socket-write]:无法写入套接字 [0]:在数据报套接字上发送的消息大于内部消息缓冲区或其他一些网络限制,或者用于接收数据报的缓冲区小于数据报本身。

如果不将图像分成几个小数据包,是否可以解决这个问题?

我只需要发送数据包为1MB。

这是我正在使用的代码:

$con=file_get_contents("image url");
$binary_data=base64_encode($con);
$host = "192.168.35.54";
$port = 1060;
$message = $binary_data;
// No Timeout 
set_time_limit(0);
$socket = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP) or die("Could not create socket\n");
socket_connect($socket, $host, $port) or die("Could not connect to server\n");
socket_write($socket, $message, strlen($message)) or die("Could not send data to server\n");

您可能会遇到许多问题。我假设你正在使用 TCP。我还假设您在一次调用 socket_write 中写入整个图像。我的第一个猜测是问题出在接收方。当您在接收端读取套接字时,不能保证一次读取即可获取整个数据块。通常,在读取 TCP 套接字时,您会循环读取并以这种方式累积数据,直到获得所需的所有数据,否则会出现错误。

您可以在其他 SO 帖子中看到一些示例代码:

从套接字读取:是否保证至少获取x字节?

EDIT

看到这些附加详细信息后,我的第一个建议是切换到 TCP。您可以以这种方式执行一次发送,然后在接收端循环读取,如上面的示例代码所示。否则,您将不得不分解数据包,并构建自己的错误检测代码以确保所有部分都到达,再加上放入序列代码以按顺序重新组装它们,这基本上只是复制 TCP 的一堆功能提供。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 php 使用 socket_write 发送大数据包 的相关文章

  • 如何将 gettext 字典中的术语输入 JavaScript?

    我正在尝试使用 php 和 javascript jquery 开发一个支持多种语言的网站 我正在尝试获得以下东西 高效 我需要尽可能减少这个操作的后端处理 可扩展 向翻译添加新字符串必须简单实用 问题是 我的 javascript 代码正
  • PHP HSV 到 RGB 公式理解

    我可以转换RGB价值观HSV使用以下代码 r r 255 g g 255 b b 255 h 0 s 0 v 0 min min min r g b max max max r g b r max min v max if r 0 h 0
  • 将文件从 Dropbox 下载到服务器

    我想从 Dropbox 下载文件 并需要代表 Dropbox 用户将其保留在我的服务器中 我尝试使用curl 和file get contents 但未能成功 我需要使用 dropbox 的任何 api 方法吗 我可以从浏览器下载该文件 但
  • dayname(curdate()) 不适用于 codeigniter php

    此 sql 在 phpmyadmin 中有效 但在 codeigniter php 中无效 function getProgramsHomepage data array this gt db gt select p name p star
  • 从 CSV 到 MySQL 的换行问题

    我正在将 csv 文件导入 MySQL 除了文件中的换行符之外 一切正常 我的 csv 行之一如下所示 42 E A R Classic Earplugs ear images ear classic jpg 5 Proven size s
  • 在 PHP 中从 URL 斜杠后获取两个单词

    我需要从 URL 中获取两个单词 例如我有以下 URL http mydomain com alrajhi invoice 108678645541 http mydomain com alrajhi invoice 10867864554
  • Symfony2 捕获会话超时

    我有一个关于 Symfony2 的问题 希望有人能帮助我 Symfony 在哪里检查用户会话以及没有会话时该怎么办 就像重定向到登录页面一样 我发现了一些类似的问题 但不是我的意思 我为什么想知道它 如果有会话超时 我想检查调用是否是 Xm
  • 打印带有图像的 html(每个图像在单独的页面上)

    我有一个带有图像的 HTML img img img img 打印时 我希望每个图像都位于单独的页面上 根据打印尺寸 现在我把图像从中间切掉了 有什么办法可以解决吗 您可以尝试以下方法 p p
  • 在 PHP 中使用“func_get_arg”的好例子是什么?

    我刚刚发现有一个函数叫做func get arg在 PHP 中 开发人员可以使用不同的方式获取参数 它似乎非常有用 因为参数的数量现在可以是任意的 但我想不出任何使用它的好例子 有哪些使用该函数来充分利用其多态特性的例子 我通常使用func
  • 我可以在没有 http 处理程序的情况下隐藏 ASP.NET 页面上的图像路径吗?

    我的网站结构中的目录下有许多静态图像 并且我不关心图像的热链接或复制保护 由于多种原因 我需要做的不是在网站上显示图像路径 或显示假路径 有什么方法可以在不求助于 http 处理程序或辅助 asp net 页面的情况下执行此操作吗 你可以使
  • 不能简单地使用 PostgreSQL 表名(“关系不存在”)

    我正在尝试运行以下 PHP 脚本来执行简单的数据库查询 db host localhost db name showfinder username user password password dbconn pg connect host
  • PHP diff() 给出不正确的值,其中 $date1 = '2016-03-01'

    我使用下面的代码来确定一年内的员工服务 datePay1 new DateTime date1 datePay2 new DateTime date2 interval datePay1 gt diff datePay2 vYears in
  • Laravel 4 Blade @include 变量

    我试图做include使用 Laravel Blade 但问题是它无法传递变量 这是我的示例代码 file include blade php
  • WooCommerce:返回特定类别中所有产品 ID 的函数

    我认为问题的标题是相当不言自明的 但要详细说明 我正在尝试在 Woocommerce 中制作自定义类别页面 我需要的是返回特定类别中的所有产品 ID 我见过这个帖子 https stackoverflow com questions 210
  • 如何获取laravel 5.4中的所有头信息

    当我打印时 echo pre print r getallheaders 它给出输出 Host gt abc com User Agent gt Mozilla 5 0 Macintosh Intel Mac OS X 10 12 rv 5
  • PDO获取最后插入的ID

    我有一个查询 我想获取插入的最后一个 ID 字段ID是主键并且自动递增 我知道我必须使用这个声明 LAST INSERT ID 该语句适用于如下查询 query INSERT INTO cell place ID VALUES LAST I
  • 将 Unicode 字符转换为等效的 ASCII 字符

    为了索引和搜索的目的 我需要 展平 一些 Unicode 字符串 例如 我需要转换G the 转换为 ASCII 最后两个字符在 ASCII 中没有紧密的表示 因此可以完全丢弃它们 所以我的期望是 echo iconv UTF 8 ASCI
  • Python UPnP/IGD 客户端实现?

    我正在寻找一个开源实现UPnP http elinux org UPnPPython 中的客户端 更具体地说是它的互联网网关设备 http en wikipedia org wiki Internet Gateway Device Prot
  • 当我尝试计算 mysqli 结果时,为什么会收到警告?

    下面的代码会导致此警告 警告 count 参数必须是数组或实现 Countable 的对象 为什么要这样做 如何防止出现警告 if isset GET edit sonum GET edit update true result mysql
  • 将 rel="nofollow" 添加到 WordPress 帖子中的所有链接

    我想将 rel nofollow 添加到我的 WordPress 帖子中的所有链接 并且我希望能够拥有一个不会获得 nofollow 的链接列表 我已经尝试了很多 但我无法正确完成 因为我真的不能很好地理解正则表达式 所以我有字符串 tex

随机推荐

  • 库“dart:isolate”中是否有 dart 的 `spawnUri(...)` 示例?

    有一个spawnUri uri 函数于dart isolate 但我没有找到任何例子 我猜到了它的用法 但失败了 假设有2个文件 在第一个文件中 它会调用spawnUri对于第二个 并与之沟通 首先 dart import dart iso
  • 验证 JTextField 值,使其以“RA”开头,然后有 8 位数字

    我有一个JTextField用户必须在其中输入数据 它的价值必须始终从RA并且后面必须正好有 8 位数字 因此 它的长度始终为 10 例如 RA12345678 我如何在 Java 中执行此操作 我尝试使用MaskFormatter and
  • 如何检测哪个 EKevent 被更改

    我遇到问题了 我需要知道 EventStore 中的事件何时发生更改 因此对于本例我使用EKEventStoreChangedNotification但这个通知给我带来了难以理解的字典userInfo它看起来像这样 EKEventStore
  • python加密模块中的错误:_RSAPrivateKey'对象没有属性'sign

    在我的 Python 代码中 我使用密码学模块 我的磁盘上有一个私钥 所以 根据文档 我使用了这个例子加载该密钥 然后使用该密钥对消息进行签名 但运行程序会抛出 AttributeError RSAPrivateKey 对象没有属性 sig
  • 学习正则表达式 (PHP) 的最佳地点是哪些? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心以获得指导 学习正则表达式 PHP 的
  • 备份/恢复整个 Eclipse 工作区

    我开始学习Android操作系统 我还处于学习模式 在学习 Android 的同时 我似乎对 Java 有了一些了解 因为我发现的大多数示例都希望您使用 Eclipse 好吧 我想我也在学习 Eclipse 这是一件好事 我不是在抱怨 这个
  • Xamarin.Forms。 SwipeGesture 和 ScrollView 在 Android 上不能一起使用

    我将 Grid 与 SwipeGesture 和 ScrollView 一起使用 ScrollView 运行良好 但 SwipeGesture 不适用于 Android 在 iOS 中我没有问题 为什么 请帮帮我
  • UIDatePicker 语言环境什么都不做?

    我正在以编程方式创建 UIDatePicker 并使用以下代码设置其区域设置 datePicker locale NSLocale alloc initWithLocaleIdentifier es ES autorelease 日期选择器
  • 在 iOS 设备上查找正确的时间

    我想找出 iOS 设备上的正确时间 即使用户手动设置了错误的时间 在设置 gt 常规 gt 日期和时间中 有自动设置选项 如果用户取消选中该选项 那么我如何以编程方式找到正确的时间 使用 NTP 协议获取当前时间或从服务器提供时间并在应用程
  • 使用foldl 和foldr 反转Scheme 中的列表

    如何定义一个函数来反转Scheme中的列表 方法是使用foldr and foldl 我们想要的是一个简洁的解决方案 使用foldl调用并使用不同的解决方案foldr调用 定义为 define foldl operation lst ini
  • QtGui.QTextEdit 根据线条包含的文本设置线条颜色

    这是我第一次使用 stackoverflow 来寻找问题的答案 我正在使用 QtGui QTextEdit 来显示类似于下面的文本 并希望根据某些行是否包含某些文本来更改文本的颜色 以 开头的行将为蓝色 包含 ERROR 的行将为红色 我目
  • 带有包含查询的 JPA 转换器

    我的 Spring Boot 应用程序中的特定查询遇到了一些问题 我正在使用 Spring 的内置文本加密来加密数据库中的文本 我有一个名为 BookRecord 的实体 Entity Table name books EntityList
  • 使用 Spring JPA 存储库和查询 DSL 进行动态投影

    我目前有一个 Spring JPA 存储库继承QuerydslPredicateExecutor and JpaRepository 我正在使用Page
  • PyQt4.QtCore.QVariant 对象而不是字符串?

    我按照这个例子键 值 pyqt QComboBox 使用下面的代码将 ID 值存储到组合框项 self combox widget addItem Apples Green indx self combox widget currentIn
  • java.lang.ClassNotFoundException:org.springframework.core.ResolvableTypeProvider [重复]

    这个问题在这里已经有答案了 我已经编写了一个 Spring 带注释的调度程序程序 但是当我执行它时 它会在帖子标题中给出错误消息 SchedulerConfig java import java util concurrent Execut
  • .net (C#) 中的模拟并通过 Process.start 打开文件

    你好 我正在使用以下方法进行一些模仿LogonUser正如许多地方所解释的那样 我使用了引入的很棒的类库here 但原理似乎全网都是一样的 我成功地模仿并去了我的 普通 用户无法到达的地方 但是当我尝试以编程方式打开一个doc文件 或txt
  • PowerShell - 启动进程和命令行开关

    我可以很好地运行 msbuild C WINDOWS Microsoft NET Framework v3 5 MSBuild exe start process msbuild wait 但是当我运行这段代码 如下 时 我收到错误 msb
  • 禁用keras或tensorflow输出[重复]

    这个问题在这里已经有答案了 我知道 stackoverflow 上已经有一些类似的问题 但没有一个解决我的问题 在 python 脚本中 我必须多次训练 keras 模型 并且我想在 GPU 支持下完成此操作 每次我在输出控制台中看到一堆行
  • Linux 32 位机器上程序的堆栈分配限制

    在 C 中 在编译器放弃并表示无法为堆栈分配更多内存之前 堆栈段可以增长多少 在 linux fedora 32 位机器上使用 gcc 在 UNIX 下 如果您正在运行 bash 请运行 ulimit a 它将列出各种限制 包括堆栈大小 我
  • 使用 php 使用 socket_write 发送大数据包

    我正在尝试将图像编码为 base64 编码并将其发送到我正在创建的 C 服务器 我正在使用 PHP 来做到这一点 因此 PHP代码是客户端 C 代码是监听服务器 该问题出现在大图像上 例如 70KB 图像 它在小图像上工作正常 比如5KB