php - 客户端同时连接多个服务器,通过连接在所有服务器执行一段代码

标签 php c++ sockets

<分区>

我想知道如何:

  • 客户端同时连接多个服务器

  • 将某种编程语言的脚本代码执行到不同的编程语言服务器,示例:

    我们在 3 个服务器之间创建一个连接,两个使用相同的编程语言(C++),一个使用不同的(PHP),然后,当一个 c++ 服务器做某事时,它通知另一个 c++ 服务器和 php 服务器,也是。

最佳答案

int startOthers (char* host, unsigned int port, char* msg) {
    int sockfd;
    struct sockaddr_in serv_addr;

    sockfd = socket (AF_INET, SOCK_STREAM, IPPROTO_TCP);

    if (sockfd > 0) {
        memset ((void *) &serv_addr, 0, sizeof (serv_addr));

        serv_addr.sin_family = AF_INET;
        serv_addr.sin_addr.s_addr = inet_addr (host);
        serv_addr.sin_port = htons (port);

        if (connect(sockfd, (struct sockaddr *) &serv_addr, sizeof (serv_addr)) == 0) {
            write(sockfd, msg, strlen(msg));
            close (sockfd);

            return 0;
        }
    }
    return -1;
}

int startServer(unsigned int port) {
    int n, sockfd, cl_sockfd;
    socklen_t clilen;
    char buffer[256 + 1];
    struct sockaddr_in server_addr, client_addr;

    sockfd = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
    if (sockfd > 0) {
        memset((void *) &server_addr, 0, sizeof(server_addr));

        server_addr.sin_family = AF_INET;
        server_addr.sin_addr.s_addr = htonl(INADDR_ANY);
        server_addr.sin_port = htons(port);

        if (bind(sockfd, (sockaddr *) & server_addr, sizeof(server_addr)) == 0) {
            listen(sockfd, 5);
            clilen = sizeof(client_addr);
            cl_sockfd = accept(sockfd, (struct sockaddr *) &client_addr, &clilen);

            if (cl_sockfd > 0) {
                while ( (n = read(cl_sockfd, buffer, 256)) <= 0); /* a client communicated with me */

                /* Do something */

                /* Inform others */
                startOthers(/* other C++ host */, /* port */, buffer);
                startOthers(/* php host */, /* port */, buffer);

                close(cl_sockfd);
                close(sockfd);
                return 0;
            }
        }
        close(sockfd);
    }
    return -1;
}

startOthers函数可以和pthreads结合使用,同时发起多个连接。它也可以连接到使用 php 创建的套接字。

不管实现细节如何,所有服务器都遵循通信协议(protocol)很重要。

关于php - 客户端同时连接多个服务器,通过连接在所有服务器执行一段代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30717019/

相关文章:

c++ - 什么是 "__cdecl"?

java - 在 Java 中验证 SSL 证书的通用名称

PHP Mail()函数: Headers was printed

C++11 for 循环语法不能正常工作

C++在shell中执行许多命令

java - Maya 和 Android 应用程序 - 通过 TCP 将 Mel 命令发送到 Maya

python - 在 Python 中可靠地获取 IPV6 地址

php - 如果未登录,则仅在购物车页面上显示最后添加的项目

php - 稍后在tinyMCE.init中添加并读取自定义变量

PHP 行以与 Mysql 相反的顺序插入