读书人

TCP的一个例子但通信不成功,该怎么处理

发布时间: 2012-05-30 20:20:04 作者: rapoo

TCP的一个例子但通信不成功
client.cpp
#include "widget.h"
#include "ui_widget.h"

Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
tcpSocket = new QTcpSocket(this);
connect(tcpSocket,SIGNAL(readyRead()),this,SLOT(readMessage()));
connect(tcpSocket,SIGNAL(error(QAbstractSocket::SocketError)),
this,SLOT(displayError(QAbstractSocket::SocketError)));
connect(ui->pushButton,SIGNAL(clicked()),this,SLOT(on_pushButton_clicked()));

}

Widget::~Widget()
{
delete ui;
}

void Widget::newConnect()
{
blockSize = 0; //初始化其为0

tcpSocket->abort(); //取消已有的连接

/* tcpSocket->connectToHost(ui->hostLineEdit->text(),

ui->portLineEdit->text().toInt());*/

tcpSocket->connectToHost("192.168.1.24",6666);
//连接到主机,这里从界面获取主机地址和端口号

}

void Widget::readMessage()

{

QDataStream in(tcpSocket);

in.setVersion(QDataStream::Qt_4_7);

//设置数据流版本,这里要和服务器端相同

if(blockSize==0) //如果是刚开始接收数据

{

//判断接收的数据是否有两字节,也就是文件的大小信息

//如果有则保存到blockSize变量中,没有则返回,继续接收数据

if(tcpSocket->bytesAvailable() < (int)sizeof(quint16)) return;

in >> blockSize;

}

if(tcpSocket->bytesAvailable() < blockSize) return;

//如果没有得到全部的数据,则返回,继续接收数据

in >> message;

//将接收到的数据存放到变量中

ui->messageLabel->setText(message);

//显示接收到的数据

}

void Widget::displayError(QAbstractSocket::SocketError)

{

qDebug() << tcpSocket->errorString(); //输出错误信息

}
void Widget::on_pushButton_clicked() //连接按钮

{

newConnect(); //请求连接

}




server.cpp
#include "widget.h"
#include "ui_widget.h"

Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
tcpServer = new QTcpServer(this);

if(!tcpServer->listen(QHostAddress::LocalHost,6666))

{ //监听本地主机的6666端口,如果出错就输出错误信息,并关闭

qDebug() << tcpServer->errorString();

close();

}
connect(tcpServer,SIGNAL(newConnection()),this,SLOT(sendMessage()));

}

Widget::~Widget()
{
delete ui;
}

void Widget::sendMessage()

{

QByteArray block; //用于暂存我们要发送的数据

QDataStream out(&block,QIODevice::WriteOnly);

//使用数据流写入数据

out.setVersion(QDataStream::Qt_4_7);

//设置数据流的版本,客户端和服务器端使用的版本要相同

out<<(quint16) 0;

out<<tr("hello Tcp!!!");

out.device()->seek(0);

out<<(quint16)(block.size()-sizeof(quint16));

QTcpSocket *clientConnection = tcpServer->nextPendingConnection();

//我们获取已经建立的连接的子套接字

connect(clientConnection,SIGNAL(disconnected()),clientConnection,

SLOT(deleteLater()));

clientConnection->write(block);

clientConnection->disconnectFromHost();

ui->statusLabel->setText("send message successful!!!");



//发送数据成功后,显示提示

}

但结果显示"Connection refused" 这是为什么 各位大侠帮帮忙

[解决办法]
我还没有做过QT的网络,不过建议你可以参考下QTcreator提供的例子,或者直接在上面修改:


例子在:QtSDK/Examples/4.7/network下面,找找看,应该有你需要的!
[解决办法]
你的代码是没问题的,出现“Connection refused”error String,是因为已有连接建立,不能重复连接。。。。。

读书人网 >QT开发

热点推荐