Qt TCP服务端和客户端连接

前言

传输控制协议(TCP,Transmission Control Protocol)是一种面向连接的、可靠的、基于字节流的传输层通信协议。

TCP旨在适应支持多网络应用的分层协议层次结构。 连接到不同但互连的计算机通信网络的主计算机中的成对进程之间依靠TCP提供可靠的通信服务。TCP假设它可以从较低级别的协议获得简单的,可能不可靠的数据报服务。 原则上,TCP应该能够在从硬线连接到分组交换或电路交换网络的各种通信系统之上操作。

如需了解UDP与TCP对比,可点击了解UDP和TCP对比
下面简单介绍下TCP用法。

首先需要在.pro文件中加入

QT       +=network

头文件

#include <QTcpServer>
#include <QTcpSocket>

服务端

  • 首先
	m_server = new QTcpServer();
	m_server->listen(QHostAddress::Any, 8888);
	//监听客户端连接
	connect(m_server, SIGNAL(newConnection()), SLOT(onNewConnection()));
  • 获取客户端连接
void Widget::onNewConnection()
{
	m_socket = m_server->nextPendingConnection();  //获取连接套接字'
	//断开连接
	connect(m_socket, SIGNAL(disconnected()), SLOT(onDisconnected()));
	//接收消息
	connect(m_socket, SIGNAL(readyRead()), SLOT(onReadyRead()));
}
  • 读取客户端消息
void Widget::onReadyRead()
{
	//可读取多个客户端消息
    QTcpSocket *obj = (QTcpSocket*)sender();
	obj->readAll();
}
  • 客户端断开连接
void Widget::onDisconnected()
{
	sender()->deleteLater();  //获取断开连接的socket对象并销毁
	qDebug() << "client disconnected!!";
}

客户端

  • 首先
	m_clientSocket = new QTcpSocket();
	
	//连接服务器成功
	connect(m_clientSocket, SIGNAL(connected()), SLOT(onConnected()));
	//读取消息
	connect(m_clientSocket, SIGNAL(readyRead()), SLOT(onReadyRead()));
	//断开连接
	connect(m_clientSocket, SIGNAL(disconnected()), SLOT(onDisconnected()));
	
	//连接到 m_ip
	m_clientSocket->connectToHost(QHostAddress(m_ip), 8888);
  • 连接服务器成功
void Widget::onConnected()
{
	qDebug() << "connected!!";
}
  • 读取消息
void Widget::onReadyRead()
{
	m_clientSocket->readAll()}
  • 断开连接
void Widget::onDisconnected()
{
	sender()->deleteLater();  //获取断开连接的socket对象并销毁
    qDebug() << "disconnected!!";
}
  • 发送消息
    m_clientSocket->write(ui->textEdit_Send->toPlainText().toLatin1());

获取客户端ip地址

void Widget::onReadyRead()
{
	QTcpSocket *obj = (QTcpSocket*)sender();
	QString ip = obj->peerAddress().toString();
}

本机ip地址

    QString ip;
    QList<QHostAddress> AddressList = QNetworkInterface::allAddresses();
    foreach(QHostAddress address, AddressList){
        if(address.protocol() == QAbstractSocket::IPv4Protocol &&
                address != QHostAddress::Null &&
                address != QHostAddress::LocalHost){
            if (address.toString().contains("127.0.")){
                continue;
            }
            ip = address.toString();
            break;
        }
    }
    qDebug()<<"m_myIp:"<<ip;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值