QByteArray block;
QDataStream out(&block, QIODevice::WriteOnly);
out.setVersion(QDataStream::Qt_4_0);
比如这是在qt tcpsocket开发过程中常用的一段代码,这里最后有一个setVersion,我在网上看到说是这是用来设置数据流的版本,客户端和服务器端使用的版本要相同 ,难道说另一端的程序也得是qt写的吗,不然就无法解析这个流?
还有我的客户端是qt写的,服务端是C#控制台,我只想让他们间传一下字符串,怎么做呢?
谢谢
6 个解决方案
#1
当然不是,你给出的代码只是对数据流做出约定,并不影响网络通讯协议。
想发字符串也比较简单,在QTcpSocket中调用write("hello")就可以啦
想发字符串也比较简单,在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();
int adf=tcpSocket->bytesToWrite();
//这里应该等待写操作完成,或者在写操作完成的回调中断开连接。
tcpSocket->disconnectFromHost();
#5
我知道了,因为我用了多线程,而QT里面
mthread->tcpSocket=new QTcpSocket();
mthread->tcpSocket->connectToHost(ipaddr, port);//建立连接
多线程的套接字一定要在主线程里初始化和连接,QT太黑了.............
mthread->tcpSocket=new QTcpSocket();
mthread->tcpSocket->connectToHost(ipaddr, port);//建立连接
多线程的套接字一定要在主线程里初始化和连接,QT太黑了.............
#6
正遇到这个问题,希望有所帮助,十分感谢!
#1
当然不是,你给出的代码只是对数据流做出约定,并不影响网络通讯协议。
想发字符串也比较简单,在QTcpSocket中调用write("hello")就可以啦
想发字符串也比较简单,在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();
int adf=tcpSocket->bytesToWrite();
//这里应该等待写操作完成,或者在写操作完成的回调中断开连接。
tcpSocket->disconnectFromHost();
#5
我知道了,因为我用了多线程,而QT里面
mthread->tcpSocket=new QTcpSocket();
mthread->tcpSocket->connectToHost(ipaddr, port);//建立连接
多线程的套接字一定要在主线程里初始化和连接,QT太黑了.............
mthread->tcpSocket=new QTcpSocket();
mthread->tcpSocket->connectToHost(ipaddr, port);//建立连接
多线程的套接字一定要在主线程里初始化和连接,QT太黑了.............
#6
正遇到这个问题,希望有所帮助,十分感谢!