Qt实现服务器与客户端传输文字和图片(Qt②)

本文是初学者记录使用Qt实现TCP服务器与客户端传输文字和图片的步骤,详细介绍了创建套接字、连接、发送和接收数据的过程,并提供了QtDesigner界面设计和关键代码示例。
摘要由CSDN通过智能技术生成

初学者记录学习内容,如有错误请各位前辈指点。
此次工程完成过程借鉴了下面得两个帖子,附上链接,并致以感谢:
qt 写的tcp客户端程序实现简单的连接接受和发送消息
qt写的一个简单的tcp服务器程序,可以接受消息发送数据
好了闲话少说进入正题。
了解C语言的盆友们应该知道实现Socket程序传递消息需要以下几点:
在服务器server端:①创建套接字SOCKET;②bind()函数绑定套接字(和IP,端口Port绑定);③Listen()进入监听状态;④accept()进入接收客户端请求;⑤send()向客户端发送数据;⑥close()关闭套接字。
在客户端Client端:①创建套接字SOCKET;②connect()向服务器发起请求;③recv()接收服务器传回的数据;④printf()打印传回的数据;⑤close()关闭套接字。
而在Qt实现Socket的过程中,也与此过程有很多相似之处。

传输文字的服务器server实现

在QtDesigner中绘制界面:
服务器端server界面
QDialog中两个的PushButton分别命名为pbtnSend和stopButton,以便后面加入槽函数。
注意进行socket连接之前要在.pro中加入network

QT       += core gui network

贴入代码如下:
sever.h

#ifndef SERVER_H
#define SERVER_H

#include <QDialog>
#include <QTcpSocket>
#include <QTcpServer>
#include <QMessageBox>
#include <QDebug>

namespace Ui {
class Server;
}

class Server : public QDialog
{
    Q_OBJECT

public:
    explicit Server(QWidget *parent = 0);
    ~Server();

private slots:
    void on_stopButton_clicked();
    void acceptConnection();
    void sendMessage();
    void displayError(QAbstractSocket::SocketError);
private:
    Ui::Server *ui;
    QTcpServer *tcpServer;
    QTcpSocket *tcpSocketConnection;
};

#endif // SERVER_H

server.cpp

#include "server.h"
#include "ui_server.h"

Server::Server(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::Server)
{
    ui->setupUi(this);
    tcpServer=new QTcpServer(this);
    if (!tcpServer->listen(QHostAddress::Any, 7777)) {
            qDebug() << tcpServer->errorString();
            close();
        }
    tcpSocketConnection = NULL;
    connect(tcpServer,SIGNAL(newConnection()),
    this,SLOT(acceptConnection()));
    connect(ui->pbtnSend,SIGNAL(clicked(bool)),
    this,SLOT(sendMessage()));
}

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

void Server::acceptConnection()
{
    tcpSocketConnection = tcpServer->nextPendingConnection();
    connect(tcpSocketConnection,SIGNAL(disconnected()),this,SLOT(deleteLater()));
    connect(tcpSocketConnection,SIGNAL(error(QAbstractSocket::SocketError)),this,SLOT(displayError(QAbstractSocket::SocketError)));
}

void Server::on_stopButton_clicked()
{
    tcpSocketConnection->abort();
    QMessageBox::about(NULL,"Connection","Connection stoped");
}

void Server::sendMessage()
{
    if(tcpSocketConnection&
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值