编程环境VS2008+Qt4.7
需先在pro文件中添加以下代码才可以使用QNetwork类
QT +=network
源代码
tcpserver.h
#ifndef TCPSERVER_H
#define TCPSERVER_H
#include <QtGui/QMainWindow>
#include "ui_tcpserver.h"
#include <QTcpServer>
#include <QStandardItemModel>
#include <QStringList>
class TcpServer : public QMainWindow
{
Q_OBJECT
public:
TcpServer(QWidget *parent = 0, Qt::WFlags flags = 0);
~TcpServer();
private slots:
void on_listen_pushButton_clicked();
void show_client();
void return_data();
private:
Ui::TcpServerClass ui;
QTcpServer *server;
QTcpSocket *client;
QStandardItemModel *ItemModel;
QStringList client_ip;
};
#endif
tcpserver.cpp
#include "tcpserver.h"
#include <QHostAddress>
#include <QTcpSocket>
#include <QMessageBox>
#include <QStandardItemModel>
#include <cstring>
TcpServer::TcpServer(QWidget *parent, Qt::WFlags flags)
: QMainWindow(parent, flags)
{
ui.setupUi(this);
server = new QTcpServer(this);
connect(ui.listen_pushButton, SIGNAL(clicked()), this, SLOT(on_listen_pushButton_clicked()),Qt::UniqueConnection);
}
TcpServer::~TcpServer()
{
delete server;
delete ItemModel;
}
void TcpServer::on_listen_pushButton_clicked()
{
if(server->listen(QHostAddress::Any,7777))
{
QMessageBox msgBox;
msgBox.setText("listen success");
msgBox.exec();
connect(server,SIGNAL(newConnection()),this,SLOT(show_client()),Qt::UniqueConnection);
}
}
void TcpServer::show_client()
{
ItemModel = new QStandardItemModel(this);
client = new QTcpSocket(this);
client = server->nextPendingConnection();
QString ip = client->peerAddress().toString();
client_ip.append(ip);
int nCount = client_ip.size();
for(int i = 0; i < nCount; i++)
{
QString string = static_cast<QString>(client_ip.at(i));
QStandardItem *item = new QStandardItem(string);
ItemModel->appendRow(item);
}
ui.client_listView->setModel(ItemModel);
connect(client,SIGNAL(readyRead()),this,SLOT(return_data()),Qt::UniqueConnection);
}
void TcpServer::return_data()
{
char *buffer = new char[1024];
memset(buffer,0,1024);
client->read(buffer,1024);
client->write(buffer);
ui.recv_textEdit->append(buffer);
}
main.cpp
#include "tcpserver.h"
#include <QtGui/QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
TcpServer w;
w.show();
return a.exec();
}
实现效果
![需要先点击listen才会开始监听](https://i-blog.csdnimg.cn/blog_migrate/ada5d67b3c4fb1e665d7d0420256f05b.png)