PHP 和 C++ 之间的套接字连接

2023-12-30

我在 PHP 页面和 C++ 代码之间创建了 TCP 套接字连接。这是这个的 C++ 代码。

服务器.cpp

#include <iostream>
#include <fstream>
#include <sstream>
#include <string>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <sys/stat.h>
#include <fcntl.h>
using namespace std;

int main(){
    int create_socket,new_socket,fd;
    int n;
    socklen_t addrlen;
    struct sockaddr_in address;
    if ((create_socket = socket(AF_INET,SOCK_STREAM,0)) > 0)
        cout<<"The socket was created\n";
    address.sin_family = AF_INET;
    address.sin_addr.s_addr = INADDR_ANY;//INADDR_ANY;inet_addr("localhost");
    address.sin_port = htons(4000);
    cout<<"\nworking";
    if (bind(create_socket,(struct sockaddr *)&address,sizeof(address)) == 0)
        cout<<"Binding Socket\n";
    while(1){
        listen(create_socket,3);
        addrlen = sizeof(struct sockaddr_in);
        cout<<"*************************\n";
        new_socket = accept(create_socket,(struct sockaddr *)&address,&addrlen);
        cout<<"*************************\n";
        char dobj[1024];
        if (new_socket > 0){
            n = read(new_socket, dobj, 1023);
            string query(dobj);
            string strl(query);
            string s, d;
            istringstream iss(strl);
            iss >> s;
            iss >> d;
            const char* source = s.c_str();
            const char* dest = d.c_str();
            printf("Here is the message: %s %s\n",source,dest);
            n = write(new_socket, "I got your message", 18);
        }
    }
    close(new_socket);
    return close(create_socket);
}

PHP代码是 索引.php

<?php
    if (isset($_GET['submit'])){
        $query = $_GET['query'];
        echo $query;
        error_reporting(E_ALL);
        $service_port = 4000;
        $address = "localhost";

        $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
        if ($socket === false){
            echo "Failed: ". socket_strerror(socket_last_error($socket))."\n";
        }

        echo "Attempting to connect to '$address' on port '$service_port'...'\n";
        $result = socket_connect($socket, $address, $service_port);

        if ($result === false){
            echo "Failed: ". socket_strerror(socket_last_error($socket))."\n";
        }

        $in = $query;
        $out = '';

        echo "Sending...\n";  
        socket_send($socket, $in, strlen($in), MSG_WAITALL);
        echo "OK.\n";

        echo "Reading response:\n\n";
        while ($out = socket_read($socket, 2048)) {
            echo $out;
        }

        socket_close($socket);
    }
?>  

<html>
<head>
</head>
<body>
    <form action="index.php" method="get">
        Query: <input type="text" name="query">
        <button type="submit" name="submit">Submit!</button>
    </form>
</body>
</html>

我在终端上运行 Server.cpp 并在浏览器上运行 index.php。当我在浏览器上运行 index.php 并输入查询“123456 7890”时,服务器会在终端上打印消息 123456 7890。

但服务器无法将消息“我收到你的消息”发送回浏览器上的index.php。只有当我按 Ctrl + C 退出服务器时,它才会将消息发送到 index.php,然后只有 index.php 才会在浏览器上回显所有内容。 这里有什么问题? 我想监听Server.cpp中的套接字并无限地向index.php发送消息。


我看起来你还没有将套接字配置为非阻塞(带有 O_NONBLOCK 标志的 fcntl),所以读取操作,read(new_socket, dobj, 1023);将阻塞直到接收到 1023 字节。

您可以将套接字配置为非阻塞或一次读取更少的字节。但最好的解决方案是第一个。

有关此问题完整解决方案的更多详细信息,请查看我的答案here https://stackoverflow.com/questions/26882800/c-socket-receive-takes-a-long-time/26884260#26884260

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

PHP 和 C++ 之间的套接字连接 的相关文章

  • 如何删除文件

    我们有一个脚本 scripts ourscript php和一个文件 media movie1 flv 当我们运行时 我们如何删除这个文件ourscript php Using unlink http php net manual en f
  • 构造函数中显式关键字的使用

    我试图了解 C 中显式关键字的用法 并查看了这个问题C 中的explicit关键字是什么意思 https stackoverflow com questions 121162 但是 那里列出的示例 实际上是前两个答案 对于用法并不是很清楚
  • JSON 数组到 C# 列表

    如何将这个简单的 JSON 字符串反序列化为 C 中的列表 on4ThnU7 n71YZYVKD CVfSpM2W 10kQotV 这样 List
  • 暂停下载线程

    我正在用 C 编写一个非常简单的批量下载程序 该程序读取要下载的 URL 的 txt 文件 我已经设置了一个全局线程和委托来更新 GUI 按下 开始 按钮即可创建并启动该线程 我想要做的是有一个 暂停 按钮 使我能够暂停下载 直到点击 恢复
  • WordPress 自定义帖子类型未显示在搜索结果中

    我在 WordPress 中遇到自定义帖子类型 测验 和搜索的问题 自定义帖子类型未显示在我的搜索结果页面中 我的搜索结果中仅显示默认的帖子内容 以下是我使用的代码 函数 php函数create posttype register post
  • 当前的 c++ 工作草案与当前标准有何不同

    通过搜索该标准的 PDF 版本 我最终找到了这个链接C 标准措辞草案 http www open std org jtc1 sc22 wg21 docs papers 2012 n3376 pdf从 2011 年开始 我意识到我可以购买最终
  • 将数据打印到文件

    我已经超载了 lt lt 运算符 使其写入文件并写入控制台 我已经为同一个函数创建了 8 个线程 并且我想输出 hello hi 如果我在无限循环中运行这个线程例程 文件中的o p是 hello hi hello hi hello hi e
  • 我可以在 PHP 会话变量中安全地存储用户名和密码吗?

    我想在 REST api 之上制作一个轻量级的 web 应用程序 用户只需进行一次身份验证 从那时起 所有针对 web api 的请求都希望通过以某种方式保持用户名和密码有效来完成 我已经做了一个工作原型我在哪里将用户名和密码存储在会话变量
  • Azure 事件中心 - 按顺序接收事件

    我使用下面的代码从 Azure Event Hub 接收事件 https learn microsoft com en us azure event hubs event hubs dotnet framework getstarted s
  • 生产代码中的 LRU 实现

    我有一些 C 代码 需要使用 LRU 技术实现缓存替换 目前我知道两种实现LRU缓存替换的方法 每次访问缓存数据时使用时间戳 最后比较替换时的时间戳 使用缓存项的堆栈 如果最近访问过它们 则将它们移动到顶部 因此最后底部将包含 LRU 候选
  • 尚未处理时调用 Form 的 Invoke 时出现 ObjectDisposeException

    我们得到一个ObjectDisposedException从一个电话到Invoke在尚未处理的表格上 这是一些演示该问题的示例代码 public partial class Form2 Form void Form2 Load object
  • PHP递归遍历对象树[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 耐用功能是否适合大量活动?

    我有一个场景 需要计算 500k 活动 都是小算盘 由于限制 我只能同时计算 30 个 想象一下下面的简单示例 FunctionName Crawl public static async Task
  • 当前的 x86 架构是否支持非临时加载(来自“正常”内存)?

    我知道有关此主题的多个问题 但是 我没有看到任何明确的答案或任何基准测量 因此 我创建了一个处理两个整数数组的简单程序 第一个数组a非常大 64 MB 第二个数组b很小 无法放入 L1 缓存 程序迭代a并将其元素添加到相应的元素中b在模块化
  • 如何清除 APC 缓存而不使 Apache 崩溃?

    如果 APC 存储大量条目 清除它们会导致 httpd 崩溃 如果 apc clear cache user 花费的时间超过 phps max execution time 调用 apc clear cache 的脚本 将在之前被 php
  • Python 无法使用套接字绑定我的外部/公共 IP 地址,给出错误但是当使用本地 IP 地址时,错误不会显示

    这是出现主要错误的代码 与我的本地 IP 的绑定将起作用 s bind 192 168 1 4 port 与我的公共 IP 的绑定失败并出现以下错误 s bind 99 99 99 99 port WinError 10049 请求的地址在
  • strcmp 给出分段错误[重复]

    这个问题在这里已经有答案了 这是我的代码给出分段错误 include
  • ZF3/2 - 如何捕获 EVENT_DISPATCH 侦听器中引发的异常?

    有什么方法可以在 EVENT DISPATCH 监听器中抛出异常吗 class Module public function onBootstrap EventInterface event application event gt get
  • 使用 crypt() 加密

    我目前正在做一个非常安全的登录系统 但我是 crypt 函数的新手 需要一些快速帮助 我在注册过程中使用 crypt 加密密码字符串并将其保存到数据库中 但是 我如何在登录过程中解密密钥 或者我应该怎么做 或者是否可以对提交的密码字符串进行
  • 错误:无效使用不完整类型“类 Move”/未定义对 Move::NONE 的引用

    拜托 我不知道为什么这个简单的代码被拒绝 它给了我 2 个编译错误 请帮帮我 I use 代码 块 20 03 我的编译器是GNU GCC 移动 hpp class Move public Move Move int int public

随机推荐

  • java.security.InvalidKeyException:密钥长度不是 128/192/256 位

    我是 Java 新手 尝试使用混合加密 使用 AES 128 对称加密 然后对生成的对称密钥使用 RSA 1024 非对称加密 有人可以帮助我为什么会收到此异常吗 我已经关注了其他帖子 并在相应的文件夹中下载了 Java 加密扩展 JCE
  • R图上的纸张边框

    不确定 R 的plot ly 函数是否具有此功能 我还没有找到它 但我想我会问 Plot ly 确实有一个 paper bgcolor 参数 可以更改绘图所在纸张的颜色 如下所示 mydf data frame x 1 5 y 1 5 pl
  • 没有意图过滤器的 Android BroadcastReceiver

    我在一些 Android 广告网络 sdks 中看到他们声明BroadcastReceiver没有意图过滤器 像这样的事情
  • 从容器连接到主机服务的示例

    我是 Docker 和无人机编程的新手 我能够将 python 脚本 包含 Dronekit 代码 部署到 Windows 10 上的 docker 容器 要运行该脚本 我需要连接到主机上的服务 我在下面提供了一个片段 Windows 有一
  • android:无法制作多线芯片组

    我在相对布局中有一个芯片组以及一个文本视图 其代码如下所示
  • 使用 C++ 静态控制背景颜色

    我正在使用 Windows API 创建一个基本的 GUI 但遇到了一个问题 它从一个主窗口开始 该窗口以我设置的自定义背景颜色打开 RGB 230 230 230 然后 它使用静态控件在左上角显示文本 settingstext Creat
  • 如何在 Windows 上挂载 docker 套接字?

    我正在尝试使一个仅在 Unices 上开发的应用程序在 Windows 上运行 它全部是 dockerized 的 并且使用 traefik 负载均衡器 用于运行 traefik 的 docker 的卷如下所示 volumes var ru
  • Photoshop 沿 y 轴移动图层

    我正在编写一个脚本 该脚本将向右 向左 向上或向下移动图层 这取决于图层的哪个边缘位于画布内 我已经设法使用bounds 0 和bounds 2 使图层左右移动 x轴 但是当我尝试让它向上或向下移动时 它仍然向左 向右移动 难道是我的边界数
  • PHP Zend Route Config.ini - 类似模式

    我正在使用配置文件在我的应用程序中路由我的请求 我有以下条目 路线 deal route deal id 路线 deal defaults controller 交易 路线 deal defaults action 索引 路线 deal r
  • Azure - 在 Powershell 中断开 VNet 集成

    通过 Azure 门户 我可以断开 VNet 集成 如下所示 我需要使用 Az 模块在 Powershell 脚本中执行此操作 这可能吗 只需使用下面的命令 它在我这边工作得很好 Remove AzResource ResourceGrou
  • axios 不发送参数的 POST 请求

    我正在尝试使用以下代码将一些数据从 Vue js 发布到基于 Symfony 的后端 updateQuestion function axios post staff question api this id id test name sr
  • IOError:[Errno 2]没有这样的文件或目录[重复]

    这个问题在这里已经有答案了 我在尝试对文件夹中的许多文件运行迭代时遇到问题 这些文件存在 如果我从文件打印文件 我可以看到它们的名称 我对编程很陌生 你能帮我一下吗 亲切的问候 import os for path dirs files i
  • 如何设置 javapns(iOS 推送通知)?

    我查看了 javapns 的文档 wiki http code google com p javapns http code google com p javapns 不幸的是 本应显而易见的事情对我来说却并非如此 如何设置有效的推送通知服
  • ‘(’ 标记之前预期的构造函数、析构函数或类型转换

    编译polygone h and polygone cc给出错误 polygone cc 5 19 error expected constructor destructor or type conversion before token
  • 从存储过程获取输出参数而不调用execute()

    我想通过实体管理器从 Java 程序中调用 PL SQL 存储过程 StoredProcedureQuery storedProcedureQuery entityManager createStoredProcedureQuery som
  • 自执行函数语法和回调语法解释

    也许是一个有点愚蠢的问题 但我想了解为什么自执行函数及其回调的语法与所有其他 JS 语法如此不同 function 我只需要理解为什么用它来封装它是有效的 我没想到这是有效的 然后额外的 之后的回调 它就直接位于它之后 我也不期望它是有效的
  • 使用嵌入的 dll 作为资源启动程序时出现问题

    我已经搞定了About com 在 Delphi EXE 中嵌入 dll 的指南 http delphi about com od windowsshellapi l aa012103c htm只要我实际上不使用 DLL 作为外部函数 这似
  • Laravel 5.3 Passport 自定义补助金?

    我知道我不是唯一一个走到这一步的人 有谁知道如何properly在 Laravel 5 3 Passport 中实现自定义授权 Or 有一个很好的链接 教程来参考如何正确执行此操作吗 我知道有这个包 https github com mik
  • 无法让动态 OrderBy 在我的通用列表上工作

    我无法让动态 OrderBy 在我的通用列表上工作 var list CacheObjects CompetencyAssessments Select x gt new CompetencyAssessmentLineViewModel
  • PHP 和 C++ 之间的套接字连接

    我在 PHP 页面和 C 代码之间创建了 TCP 套接字连接 这是这个的 C 代码 服务器 cpp include