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

TCP 文件传输的疑问

2
回复
6387
查看
[复制链接]
累计签到:2 天
连续签到:1 天
来源: 2017-6-3 00:33:12 显示全部楼层 |阅读模式
1Qter豆
在网上(http://blog.csdn.net/hulifangjiayou/article/details/47785763)找到一个类似的demo 想自己改成服务器端——在收到新的连接后通过以下代码,点击YES后再继续传输

void Widget::acceptConnection()  
{  
    QMessageBox::StandardButton choice;
    choice = QMessageBox::question(this, tr("hint"),tr("content"),QMessageBox::Yes | QMessageBox::No);
    if(choice == QMessageBox::Yes)
    {
        receivedSocket = server->nextPendingConnection();  
        connect(receivedSocket, SIGNAL(readyRead()), this, SLOT(readClient()));  
    }  
}

但总是不对,文件传输会在点击之前完成,想向大家请教一下如何解决?

他的大致思路是这样的

class Widget : public QWidget  
{
    ...
    QTcpServer *server;  
    QTcpSocket *receivedSocket;  
  
private slots:  
    void acceptConnection();  
    void readClient();  
    void on_pushButton_clicked();  
};  

Widget::Widget(QWidget *parent) :  
    QWidget(parent),  
    ui(new Ui::Widget)  
{  
    ...  
}  
  
void Widget::acceptConnection()  
{  
    ...@
    receivedSocket = server->nextPendingConnection();  
    connect(receivedSocket, SIGNAL(readyRead()), this, SLOT(readClient()));  
}  
  
void Widget::readClient()  
{
    ...
    if(byteReceived == 0)  //才刚开始接收数据,此数据为文件信息  
        ...
    else  //正式读取文件内容  
        ...

}  

void Widget:n_pushButton_clicked()  
{  
    ...
  
    server = new QTcpServer(this);  
    server->listen(QHostAddress("172.19.198.43"), 10000);  
  
    connect(server, SIGNAL(newConnection()), this, SLOT(acceptConnection()));  
    ...
}  

回复

使用道具 举报

累计签到:742 天
连续签到:1 天
2017-6-3 08:45:27 显示全部楼层
如果没有连接到槽函数,楼主怎么知道传输完了呢~~~
回复

使用道具 举报

累计签到:2 天
连续签到:1 天
2017-6-3 11:35:08 显示全部楼层
Since 发表于 2017-6-3 08:45
如果没有连接到槽函数,楼主怎么知道传输完了呢~~~

因为我在接受文件的保存目录下发现了发送的文件.
回复

使用道具 举报

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

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