找回密码
 立即注册
收起左侧

新手请教一个tcpserver的问题"The remote host closed the connection"

2
回复
10007
查看
[复制链接]
累计签到:18 天
连续签到:1 天
来源: 2015-11-4 16:49:37 显示全部楼层 |阅读模式
1Qter豆
我在tcpserver里侦听了本地的一个端口,然后用newConnection去判断有没有client连接,如果有,把标志位拉高,然后我想隔一段时间就在tcpserver里发一串数据给我的client,我是这样写的

tcpServer = new QTcpServer(this);
    if(!tcpServer->listen(QHostAddress:ocalHost, 95878))
    {
        //侦听本地主机的6666端口,如果出错就输出错误信息,并关闭
        qDebug() << "tcpserver" <<tcpServer->errorString();
    }
    //连接信号和相应槽函数
    qDebug() << "listin 95878 success";
    connect(tcpServer, SIGNAL(newConnection()), this, SLOT(newclientSlot()));
    qDebug() << "connect 95878 success";

void myTcpServer::newclientSlot()
{
    qDebug() << "have a new connect";
    isClient = true;
}

void myTcpServer::sendData(struCseSensor * sensordata)
{
    qDebug() << "sendMessage ing";
    //用于暂存我们要发送的数据
    QByteArray myBlock;

    myBlock.resize(sizeof(struCseSensor));
    memcpy(myBlock.data(), &sensordata, sizeof(struCseSensor));

    qDebug() << "cpydata success";
    //获取已经建立的连接的子套接字
    if(isClient)
    {
        QTcpSocket *clientConnection = tcpServer->nextPendingConnection();
        clientConnection->write(myBlock);
    }
    //发送数据成功后,显示提示
    qDebug() << "send data success";
}

现在的问题是,我的client能够收到一次server的数据,但是,第二次执行到红色加粗部分的时候,就报错,说"The remote host closed the connection"  。

求qter帮助~
先谢谢啦。

回复

使用道具 举报

累计签到:83 天
连续签到:1 天
2015-12-23 16:11:56 显示全部楼层
肯定是你执行完一次后就断开连接了,仔细缕缕,看看disconnect那附近
回复

使用道具 举报

累计签到:5 天
连续签到:1 天
2016-1-28 10:42:49 显示全部楼层
QTcpSocket *clientConnection = tcpServer->nextPendingConnection();
第一次执行这个,是因为有一个pending的socket,所以你获取到了pending的socket,但是第二次你执行的时候并没有pending的socket,所以会返回一个0,也就是你向一个为0的socket发送了数据。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

公告
可以关注我们的微信公众号yafeilinux_friends获取最新动态,或者加入QQ会员群进行交流:190741849、186601429(已满) 我知道了