Qt下socked编程,记录TCP客户端和服务端、UDP客户端发送的实现

QT下的TCP通信过程

Qt中提供的所有的Socket类都是非阻塞的。

Qt中常用的用于socket通信的套接字类:

1、QTcpServer 用于TCP/IP通信, 作为服务器端套接字使用

2、QTcpSocket 用于TCP/IP通信,作为客户端套接字使用。

3、QUdpSocket 用于UDP通信,服务器,客户端均使用此套接字。

 

一、建立一个客户端 5步

1分别是创建套接字对象(QTcpSocket类)

2连接服务器(connectToHost()函数),

3向服务器发送数据(write()函数),

4读取缓冲区数据(Net_readData()函数),

5断开与服务器连接(disconnectFromHost()函数)。

 

//1、创建一个SOCK连接

m_sockClientFd = new QTcpSocket;

//2、连接服务器

m_sockClientFd>connectToHost(g_NetInfot.ipBuf,g_NetInfot.portBuf.toInt(0,10),QTcpSocket::ReadWrite);

if(!m_sockClientFd->waitForConnected(10000))

{

qDebug()<<"等待超过10s,请重新连接.....";

m_CurCLientConnectStatus = CLLIENT_CONNSTATUS_FAILED;

continue;

}

else

{

m_CurCLientConnectStatus = CLLIENT_CONNSTATUS_SUCCEE;

qDebug()<<"连接服务器成功.....";

}

//3、向服务器发送数据

int ret = m_sockClientFd->write(m_writeStr.toLocal8Bit().data());

bool Boolflush = m_sockClientFd->flush();//检测是否写入成功

if(ret != -1 && Boolflush == 1)

{

qDebug()<<"Client 写入数据成功.....";

}

//4、读取缓冲区数据

connect(m_sockClientFd,SIGNAL(readyRead()),this,SLOT(Net_readData()));

//5关闭sock,类似close

connect(m_sockClientFd, SIGNAL(disconnected()), this, SLOT(socket_Disconnected()));

 

二、服务端

/*

服务端的编写主要分为五个步骤

1、分别是创建套接字对象(QTcpSocket类)

//1、创建一个SOCK连接,注意跟客户端创建sock类不一样

m_sockServerFd = new QTcpServer();

m_socket = new QTcpSocket();

2、侦听端口(listen)

if(!m_sockServerFd->listen(QHostAddress::Any, g_NetInfot.portBuf.toInt(0,10)))

{

//若出错,则输出错误信息

qDebug()<<m_sockServerFd->errorString();

continue;

}

else

{

qDebug()<<"listen success:"<<m_sockServerFd;

}

3、当服务器被客户端访问时newConnection

connect(m_sockServerFd, SIGNAL(newConnection()), this, SLOT(m_acceptConnection()));

 

4、//读取数据

connect(m_socket,SIGNAL(readyRead()),this,SLOT(m_receiveData()));

//5、向服务器发送数据

int ret = m_socket->write(m_writeStr.toLocal8Bit().data());

6、取消侦听(close()函数)

//主动和客户端断开连接

m_socket->disconnectFromHost();

m_socket->close();

m_socket = NULL;

*/

三、Udp通讯

客户端发送

1)、发送端流程

//1.建立socket

m_sockUdpFd = new QUdpSocket(this);

 

//2、bin绑定IP 端口

m_sockUdpFd->bind(g_NetInfot.portBuf.toInt(0,10),QUdpSocket::ShareAddress);

 

//3、读取缓冲区,接收数据

connect(m_sockUdpFd,&QUdpSocket::readyRead,this,&UDP::m_acceptConnection);

 

//4、发送消息

m_sockUdpFd->writeDatagram(m_writeStr.toLocal8Bit().data(),QHostAddress::Broadcast,123);

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值