2、程序有问题,运行QT自带的demo也不成功,感觉不科学。代理可能出问题。发现好像设置了IE代理,解决方案加入QNetworkProxyFactorysetUseSystemConfigurationfalse。问题完美解决。我在使用qt进行tcp传输时候,接收端遇到接收粘包问题。现在将解决思路描述如下。
1、发送数据格式
一帧数据以!开头以?结尾,帧数据间以+区分
例如:!12#21#32#23#50?+
2、接收端处理
判断接收数据是否以+结尾,如果是那么就以+切分,然后处理每一帧数据,如果不是那么就将接收字符串缓存拼接起来。
QByteArray array=tcpsocket->readAll();
QString data(array);
static QString data1="";
data1+=data;
if(data1endsWith("+")){
QStringList listdata=data1split("+");
// +分割
//判断处理每一个
if(listdatalength()>0){
for(int i=0;i<listdatalength();i++){
QString dataN=listdataat(i);
if(dataNlength()>0){
//数据解析
if(dataNstartsWith("!"))
{
dataN=dataNleft(dataNlength()-1);//取出首字母
dataN=dataNright(dataNlength()-1);//去除最后一个字母
QStringList list=dataNsplit("#");
QString dtime=QDateTime::currentDateTime()toString("yyyyMMdd/hh/mm/ss");
int rows=ui->tableWidget->rowCount();
ui->tableWidget->setRowCount(rows+1);
ui->tableWidget->setItem(rows,0,new QTableWidgetItem(dtime));
for (int i=0;i<listlength();i++){
ui->tableWidget->setItem(rows,i+1,new QTableWidgetItem(listat(i)));
}
}
}
}
data1="";
}
3、缺点
由于使用了缓存,那么实时性大大折扣。
这是因为文件路径不对造成的,解决方法如下:
1、首先pro文件配置:Qt网络功能需要在pro文件增加网络库。
2、QTcpServer服务端建立的方法代码,如下图所示。
3、QTcpServer当有新客户端连接时,会发出QTcpServer::newConnection的信号方法代码。
4、客户端为主动连接方不需要监听,直接建立QTcpSocket代码。
5、最后通过connectToHost连接指定ip和端口,将socket的连接成功的信号与对应槽连接,当连接成功可以将自定义的标记位置为true。
QTcpSocket 类:提供一个TCP套接字
TCP是一个面向连接,可靠的的通信协议,非常适合于连续不断的数据传递
QTcpSocket 是QAbstractSocket类非常方便的一个子类,让你创建一个TCP连接和数据流交流。
QTcpServer类:
提供一个TCP基础服务类继承自QObject
这个类用来接收到来的TCP连接,可以指定TCP端口或者用QTcpServer自己挑选一个端口,可以监听一个指定的地址或者所有的机器地址。各位大侠们,由于对QT不熟悉,所以请大侠们多多指教
我现在服务端是C# ,发送了 转换为二进制流,已字节的形式发送,
------解决方案--------------------------------------------------------
假设你的二进制流放在char buffer[]里FILE fp;fp = fopen(testjpeg, wb);
if(fp != NULL){size_t ret = fwrite(buffer, sizeof(char), size, fp);
fclose(fp);}
------解决方案--------------------------------------------------------
只要严格按照发送协议和标准格式重新组合就可以了
------解决方案--------------------------------------------------------
流就是流,就是一串0101的数据,你传递的,就是这样的数据,不要把它理解成或者声音或者视频,它仅仅是01而已,关键点是,当你把这些01读到客户端的一个buffer中后(一楼的应该用unsigned char buffer[]吧),如何保存这些数据,你把这些数据写进一个jpeg文件,它就是一张,你把它写进一个txt文件,它就是一堆乱码
------解决方案--------------------------------------------------------
可能是您的BUFFER太小
------解决方案--------------------------------------------------------
QT中的也和你给的QT设备有关系的吧
------解决方案--------------------------------------------------------
全部弄完拼接起来,有带宽限制的 不可能一下子发送完毕吧
所谓细水长流~
哎呀 洒家又扯淡了。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)