C ++ IP服务器套接字始终从PHP套接字客户端接收“ 0100000001000000”

哈维·拉姆(Javi ram)

我有一个通过IP套接字连接到C ++服务器(使用Qt 4.8)的Web客户端(php)。奇怪的是,如果我从网络发送任何内容(我检查的数据正确),我总是在服务器端收到“ 0100000001000000”。

怪异的,如果我在连接套接字和在Web端发送数据之间执行“ sleep(1)”操作,则大多数时候数据在服务器端都是正确的。下面我附上相关代码:

PHP端(客户端):

    ....
    $socket = socket_create(AF_INET, SOCK_STREAM, /*SOL_TCP*/0);

    if(!$socket) 
        return false;

    //EscribirTrama writes $data
    $this->EscribirTrama($data, $peticion);
    $exito = true;

    if(!socket_connect($socket , gethostbyname($this->direccion) , $this->puerto))
    {
        $error = socket_strerror(socket_last_error());
        return false;
    }

    //FIXME this sleep resolves the problem most of the time, why?!
    sleep(1);

    if(!socket_send ($socket, $data, strlen($data), 0))
    {
        $error = socket_strerror(socket_last_error());
        $exito = false;
    }

    socket_close($socket);

C ++端(服务器,使用QTcpSocket)

    ....
    if(!p_socket->waitForReadyRead())
        return false;
    received_bytes = 0;

    if(p_socket->bytesAvailable() < START_SIZE)
    {
        Log.AVISO("Insuficientes datos en el socket");
        return false;
    }

    QByteArray start_bytes = p_socket->read(START_SIZE);

    received_bytes += TAM_COMIENZO;

    quint8 head = start_bytes.at(0);

    if(head != START_CHAR) //this happens when not using sleep at client side!
    {
        //bad data
        QByteArray bad_data;

        bad_data.append(head);

        while(p_socket->bytesAvailable() ||
          p_socket->waitForReadyRead(MS_PARTIAL_READ))
        {
            QByteArray bad = p_socket->readAll();

            received_bytes += bad.size();
            bad_data.append(bad);
        }

        //At this point bad_data is always "0100000001000000"!
        Log.ERROR("Se ha recibido una trama sin cabacera: " +
            CFunciones::Cadena(bad_data));

        return false;
    }
    ......

为什么会这样呢?我怎样才能解决这个问题?感谢帮助!!

哈维·拉姆(Javi ram)

最终,错误出在C ++服务器端。此奇怪错误的原因是因为p_socket来自QTcpServer类,但是p_socket和QTcpServer不在同一线程中,从而产生此意外行为。

实际上,除了使用睡眠之外,更改代码还会更改服务器从p_socket读取的内容(例如,从010000 ...更改为0200000)。

解决方案:在QTcpServer中重新实现“ incommingConnection”方法,以便能够在其他线程中使用套接字。http://qt-project.org/doc/qt-4.8/qtcpserver.html#incomingConnection

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

C ++套接字服务器从Java客户端接收味精,但不是

来自分类Dev

无法从Java套接字服务器接收数据到C套接字客户端

来自分类Dev

PHP客户端套接字与C#套接字服务器的连接

来自分类Dev

C客户端/服务器套接字错误

来自分类Dev

将输入从C套接字客户端读取到Java套接字服务器

来自分类Dev

将输入从C套接字客户端读取到Java套接字服务器

来自分类Dev

C TCP/IP 套接字:如何将客户端套接字的输入同步到服务器套接字以交替进行

来自分类Dev

即使关闭了输出流,C ++套接字客户端仍会从Java服务器接收消息

来自分类Dev

C套接字客户端/服务器pthreads服务器广播

来自分类Dev

C套接字客户端/服务器pthreads服务器广播

来自分类Dev

服务器套接字不能接受客户端。(C# UWP 异步套接字编程)

来自分类Dev

C ++套接字客户端/服务器服务器不响应客户端

来自分类Dev

C#UDP套接字客户端和服务器

来自分类Dev

如何在Python客户端和C ++服务器上使用套接字

来自分类Dev

套接字将C#客户端发布到Java服务器

来自分类Dev

套接字编程:C语言中的UDP客户端-服务器

来自分类Dev

UNIX域套接字C ++服务器无法将数据返回给客户端

来自分类Dev

使用C中的UDP套接字将结构从客户端传递到服务器

来自分类Dev

C ++服务器无法通过套接字从python客户端读取我的消息

来自分类Dev

使用C中的套接字将文件从客户端发送到服务器

来自分类Dev

套接字编程c#/客户端-服务器通信

来自分类Dev

C ++套接字客户端到python服务器未创建连接

来自分类Dev

在C中运行客户端和服务器套接字连接-带线程

来自分类Dev

在C ++中使用TCP套接字进行远程客户端和服务器通信

来自分类Dev

C#UDP套接字客户端和服务器

来自分类Dev

C#TCP套接字服务器客户端连接

来自分类Dev

使用套接字C#客户端/服务器发送文件

来自分类Dev

服务器无法通过C中的套接字向客户端发送消息

来自分类Dev

客户端未与服务器C连接(套接字编程)

Related 相关文章

  1. 1

    C ++套接字服务器从Java客户端接收味精,但不是

  2. 2

    无法从Java套接字服务器接收数据到C套接字客户端

  3. 3

    PHP客户端套接字与C#套接字服务器的连接

  4. 4

    C客户端/服务器套接字错误

  5. 5

    将输入从C套接字客户端读取到Java套接字服务器

  6. 6

    将输入从C套接字客户端读取到Java套接字服务器

  7. 7

    C TCP/IP 套接字:如何将客户端套接字的输入同步到服务器套接字以交替进行

  8. 8

    即使关闭了输出流,C ++套接字客户端仍会从Java服务器接收消息

  9. 9

    C套接字客户端/服务器pthreads服务器广播

  10. 10

    C套接字客户端/服务器pthreads服务器广播

  11. 11

    服务器套接字不能接受客户端。(C# UWP 异步套接字编程)

  12. 12

    C ++套接字客户端/服务器服务器不响应客户端

  13. 13

    C#UDP套接字客户端和服务器

  14. 14

    如何在Python客户端和C ++服务器上使用套接字

  15. 15

    套接字将C#客户端发布到Java服务器

  16. 16

    套接字编程:C语言中的UDP客户端-服务器

  17. 17

    UNIX域套接字C ++服务器无法将数据返回给客户端

  18. 18

    使用C中的UDP套接字将结构从客户端传递到服务器

  19. 19

    C ++服务器无法通过套接字从python客户端读取我的消息

  20. 20

    使用C中的套接字将文件从客户端发送到服务器

  21. 21

    套接字编程c#/客户端-服务器通信

  22. 22

    C ++套接字客户端到python服务器未创建连接

  23. 23

    在C中运行客户端和服务器套接字连接-带线程

  24. 24

    在C ++中使用TCP套接字进行远程客户端和服务器通信

  25. 25

    C#UDP套接字客户端和服务器

  26. 26

    C#TCP套接字服务器客户端连接

  27. 27

    使用套接字C#客户端/服务器发送文件

  28. 28

    服务器无法通过C中的套接字向客户端发送消息

  29. 29

    客户端未与服务器C连接(套接字编程)

热门标签

归档