QTcpSocket学习笔记--TcpServer一对一通信实例

6 篇文章 0 订阅
4 篇文章 0 订阅

编程环境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;//用于存放连接上来客户端的ip,显示到listView中
};

#endif // TCPSERVER_H

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;
}

// 监听所有的ip地址,端口号为7777
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);
	}
}

// 连接上来新的客户端就把他的ip地址显示在listview上
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才会开始监听

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值