QT TCP网络通信问题 20
客户端:tcpsocket->write((char*)&mesg,sizeof(mesginfo));mesg是一个结构体typedefstructmesginfo{m...
客户端:
tcpsocket->write((char *)&mesg, sizeof(mesginfo));
mesg是一个结构体
typedef struct mesginfo
{
mesgMode MESGMODE; //消息模式
Info info; //消息信息
QString mesg; //消息内容【主要内容】
QString mesgadd; //消息附加内容【接收者|发送者|发送时间】
}mesginfo;
服务器端read读取:
tempsocket->read((char*)&mesg, sizeof(mesginfo));
从客户端发送信息,能够触发服务器的readyread信号 但是读不到数据呀 我在网站上找了很久,没有找到解决方法 求教呀!
非常感谢!! 展开
tcpsocket->write((char *)&mesg, sizeof(mesginfo));
mesg是一个结构体
typedef struct mesginfo
{
mesgMode MESGMODE; //消息模式
Info info; //消息信息
QString mesg; //消息内容【主要内容】
QString mesgadd; //消息附加内容【接收者|发送者|发送时间】
}mesginfo;
服务器端read读取:
tempsocket->read((char*)&mesg, sizeof(mesginfo));
从客户端发送信息,能够触发服务器的readyread信号 但是读不到数据呀 我在网站上找了很久,没有找到解决方法 求教呀!
非常感谢!! 展开
1个回答
展开全部
客户端要流程:流程:
1.创建tcpSocket,tcpClient= new QTcpSocket(this);
2.关联信号connected和槽函数startTransfer,
connect(tcpClient,SIGNAL(connected()),this,SLOT(startTransfer()));
其中信号connected在连接服务器成功(即本客户端执行 tcpClient->connectToHost,得到服务器的成功响应)时发射,
3.关联信号bytesWritten和槽函数updateClientProgress,
connect(tcpClient,SIGNAL(bytesWritten(qint64)),this,SLOT(updateClientProgress(qint64)));
其中信号bytesWritten在当有数据发送成功时(即本客户端执行 tcpClient->write(outBlock);
服务器的成功收outBlock时)时发射,此时执行updateClientProgress来更新进度条并接着发送剩余数据。
4.连接到某个ip的某个端口,tcpClient->connectToHost(QHostAddress(ui->hostLineEdit->text()),ui->portLineEdit->text().toInt())
服务端:流程
1. 创建 QTcpServer tcpServer;
使之监听本机的某个端口,tcpServer.listen(QHostAddress("192.168.1.100"), 6666);
2. 关联信号newConnection和槽函数sendMessage,connect(&tcpServer, SIGNAL(newConnection()),
this, SLOT(acceptConnection()));其中信号newConnection在有客户端的连接请求(即客户端执行
tcpSocket->connectToHost)时发射,此时执行acceptConnection;
3. 实现槽函数acceptConnection,在里面从tcpServer取得已经建立但挂起的QTcpSocket连接
tcpServerConnection = tcpServer.nextPendingConnection();
并关联信号readyRead和槽函数updateServerProgress,
connect(tcpServerConnection, SIGNAL(readyRead()), this, SLOT(updateServerProgress()));
4. 实现槽函数updateServerProgress。
1.创建tcpSocket,tcpClient= new QTcpSocket(this);
2.关联信号connected和槽函数startTransfer,
connect(tcpClient,SIGNAL(connected()),this,SLOT(startTransfer()));
其中信号connected在连接服务器成功(即本客户端执行 tcpClient->connectToHost,得到服务器的成功响应)时发射,
3.关联信号bytesWritten和槽函数updateClientProgress,
connect(tcpClient,SIGNAL(bytesWritten(qint64)),this,SLOT(updateClientProgress(qint64)));
其中信号bytesWritten在当有数据发送成功时(即本客户端执行 tcpClient->write(outBlock);
服务器的成功收outBlock时)时发射,此时执行updateClientProgress来更新进度条并接着发送剩余数据。
4.连接到某个ip的某个端口,tcpClient->connectToHost(QHostAddress(ui->hostLineEdit->text()),ui->portLineEdit->text().toInt())
服务端:流程
1. 创建 QTcpServer tcpServer;
使之监听本机的某个端口,tcpServer.listen(QHostAddress("192.168.1.100"), 6666);
2. 关联信号newConnection和槽函数sendMessage,connect(&tcpServer, SIGNAL(newConnection()),
this, SLOT(acceptConnection()));其中信号newConnection在有客户端的连接请求(即客户端执行
tcpSocket->connectToHost)时发射,此时执行acceptConnection;
3. 实现槽函数acceptConnection,在里面从tcpServer取得已经建立但挂起的QTcpSocket连接
tcpServerConnection = tcpServer.nextPendingConnection();
并关联信号readyRead和槽函数updateServerProgress,
connect(tcpServerConnection, SIGNAL(readyRead()), this, SLOT(updateServerProgress()));
4. 实现槽函数updateServerProgress。
追问
连接那些已经做好,我只想知道 ,如果我要以结构体传送的话,如何进行,我的方法是有问题吗,哪里有问题呢?非常感谢!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询