初学者记录学习内容,如有错误请各位前辈指点。
此次工程完成过程借鉴了下面得两个帖子,附上链接,并致以感谢:
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中绘制界面:
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&