php - 网页不打印winsock信息

标签 php mysql c

我正在尝试将数据从 winsock 应用程序发送到 PHP 脚本。我已经尝试了各种 header 类型,但没有成功,而且我似乎找不到足够的信息。

数据已发送,但 PHP 脚本未打印任何结果,因此我认为错误是 header 类型。

C Winsock 代码

    int main()
{
    SOCKADDR_IN sock;
    SOCKET s;
    WSADATA wsa;
    int lengthofrequest = 0;
    char httprequest[180] =
        "POST /test.php?name=alex&password=secret HTTP/1.1\r\n"
        "Host: 127.0.0.1\r\n"
        "Pragma: no-cache\r\n"
        "Content-type: text/html\r\n"
        "Connection: close\r\n"
        "Content-Length: 25\r\n"
        "\r\n";

    lengthofrequest = strlen(httprequest);

    // init winsock

    if (WSAStartup(MAKEWORD(2, 2), &wsa) != 0)
        return WSASYSNOTREADY;

    sock.sin_addr.s_addr = inet_addr("127.0.0.1");
    sock.sin_family = AF_INET;
    sock.sin_port = htons(80);

    // create socket

    s = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
    if (s == INVALID_SOCKET)
        return 1;

    // connect to the http panel

    int conn = connect(s, (SOCKADDR*)&sock, sizeof(sock));
    if (conn < 0)
        return 1;

    // send http header

    send(s, httprequest, lengthofrequest, 0);

    // close socket

    closesocket(s);
    WSACleanup();

    return 0;
}

PHP 脚本

<?php
    if(isset($_POST['name'], $_POST['password']))
    {
       echo $_POST['name'];
       echo $_POST['password'];
    }
?>

我将不胜感激任何帮助或指导。谢谢。

最佳答案

您正在混合发布和获取
使用 $_GET 访问您的数据,因为您的数据已附加到 url

试试这个:

<?php
    if(isset($_GET['name'], $_GET['password']))
    {
       echo $_GET['name'];
       echo $_GET['password'];
    }

这应该可行,但您应该考虑将 C 代码中的请求类型更改为 GET,以使您的代码清晰简单

你在这里所做的事情是不明确的:

 "POST /test.php?name=alex&password=secret HTTP/1.1\r\n"    

因为您使用 post 发送 get 参数,而 post body 实际上是空的。

此外,您应该在 php 脚本末尾省略 ?>

关于php - 网页不打印winsock信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50765084/

相关文章:

php mysql 使复选框被选中

php - mysql比较produst的前两个单词并给出最低价格

php - 如何使用 .htaccess 重定向到动态内容

php - 用php连接csv中的部分行

php - 在 PHP 中比较多个值

c - 在 GLIB 主循环中添加 fd

mysql - Next-Key Locks和Gap Lock有什么区别?

mysql - 无限循环更新? MySQL触发器

c - 使用malloc()分配相同大小的内存时int*和char*有什么区别

使用 C 将 COMP 和 COMP-3 Packed Decimal 转换为可读值