qt写的tcp socket程序客户端只能和用qt写的服务端通信吗?

时间:2021-08-19 22:16:12

QByteArray block;
QDataStream out(&block, QIODevice::WriteOnly);
out.setVersion(QDataStream::Qt_4_0);


比如这是在qt tcpsocket开发过程中常用的一段代码,这里最后有一个setVersion,我在网上看到说是这是用来设置数据流的版本,客户端和服务器端使用的版本要相同 ,难道说另一端的程序也得是qt写的吗,不然就无法解析这个流?

还有我的客户端是qt写的,服务端是C#控制台,我只想让他们间传一下字符串,怎么做呢?
谢谢

6 个解决方案

#1


当然不是,你给出的代码只是对数据流做出约定,并不影响网络通讯协议。

想发字符串也比较简单,在QTcpSocket中调用write("hello")就可以啦

#2


楼上大哥,我发字符串就是用这两个函数发的,为什么死活发不出去啊,谢谢

void monitorthread::createTcpSocket()
{
    tcpSocket=new QTcpSocket(this);
    tcpSocket->abort();
    tcpSocket->connectToHost(ipaddr,port);
}
void monitorthread::readMessage()
{
    QByteArray block;

    QTextStream out(&block);

    out << tr("1231231\r\n");

    tcpSocket->write(block);
    tcpSocket->flush();
    int adf=tcpSocket->bytesToWrite();

    tcpSocket->disconnectFromHost();
    return "";
}

#3


这两个函数一个创建套接字,一个发数据,就是那串数字,为什么发不出去?

#4


写操作应该是异步的,你还没等他写完就断开连接了。
    int adf=tcpSocket->bytesToWrite();
    //这里应该等待写操作完成,或者在写操作完成的回调中断开连接。
    tcpSocket->disconnectFromHost();

#5


我知道了,因为我用了多线程,而QT里面
mthread->tcpSocket=new QTcpSocket();
mthread->tcpSocket->connectToHost(ipaddr, port);//建立连接

多线程的套接字一定要在主线程里初始化和连接,QT太黑了.............

#6


正遇到这个问题,希望有所帮助,十分感谢!

#1


当然不是,你给出的代码只是对数据流做出约定,并不影响网络通讯协议。

想发字符串也比较简单,在QTcpSocket中调用write("hello")就可以啦

#2


楼上大哥,我发字符串就是用这两个函数发的,为什么死活发不出去啊,谢谢

void monitorthread::createTcpSocket()
{
    tcpSocket=new QTcpSocket(this);
    tcpSocket->abort();
    tcpSocket->connectToHost(ipaddr,port);
}
void monitorthread::readMessage()
{
    QByteArray block;

    QTextStream out(&block);

    out << tr("1231231\r\n");

    tcpSocket->write(block);
    tcpSocket->flush();
    int adf=tcpSocket->bytesToWrite();

    tcpSocket->disconnectFromHost();
    return "";
}

#3


这两个函数一个创建套接字,一个发数据,就是那串数字,为什么发不出去?

#4


写操作应该是异步的,你还没等他写完就断开连接了。
    int adf=tcpSocket->bytesToWrite();
    //这里应该等待写操作完成,或者在写操作完成的回调中断开连接。
    tcpSocket->disconnectFromHost();

#5


我知道了,因为我用了多线程,而QT里面
mthread->tcpSocket=new QTcpSocket();
mthread->tcpSocket->connectToHost(ipaddr, port);//建立连接

多线程的套接字一定要在主线程里初始化和连接,QT太黑了.............

#6


正遇到这个问题,希望有所帮助,十分感谢!