qt TCP网络编程与聊天室的实现

版权声明:有需要的请联系QQ1634475153,欢迎技术交流 https://blog.csdn.net/jinmie0193/article/details/79119419

先看运行效果:

首先启动服务器:用户后台数据捕获


之后登陆A用户(假设要给B用户发消息):

输入接受/发送方AB,然后连接服务,类似登陆

也可以只输入发送方,即自身name,接收方随时可以更改,但发消息时,必须指定接收方是谁


之后登陆B(假设要与A通信)

输入接受/发送方AB,然后连接服务,类似登陆


然后就可以输入消息,收发数据了


下载地址:

点击打开链接

首先在pro中添加network

QT里, tcp编程需用到两个类: QTcpServer, QtcpSocket

服务端:

  //1.  创建一个QTcpServer对象
        QTcpServer *server = new QTcpServer;
        //2. 调用对象的listen函数成员进行绑定地址与端口号, 
        //并监听端口,绑定端口号6666, 成功返回true, 失败返回false
        server->listen(QHostAddress::Any, 6666);
        // 3.  当有客户端连接时,对象会发出newConnection信号,
        //客户端的连接处理就在触发的槽函数new_client里处理了。
        connect(server, SIGNAL(newConnection()), this, SLOT(new_client()));  
        // 4. 在new_client里处理连接. 每个客户端连接上来后,
        //在服务器端就会有一个QTcpSocket对象,
        //QTcpSocket对象在服务器端用于与客户端通信使用,
        //如多个客户端连接上来,则会有多个QTcpSocket对象.
        QTcpSocket *client;
        //处理客户端连接,调用此处理函数后,
        //会得到一个QTcpSocket对象的地址,
        //此对象专用于这个连接上来的客户端通信使用。
        client = server->nextPendingConnection();        
        //5.连接信号,做相应的处理       
        //当客户端发数据到服务器端时,它会发出信号readyRead, 通知接收客户端的数据. 
        // tcp_read槽函数用于接收客户端的数据, 在槽函数里调用QTcpSocket对象的read函数即可.
        connect(client, SIGNAL(readyRead()), this, SLOT(tcp_read()));  
        //当客户端断开连接时,会发出disconnected信号,通知客户端已断线.
        // lost_client槽函数用于处理客户端断开连接
        connect(client, SIGNAL(disconnected()), this, SLOT(lost_client())); 

客户端:     

 // 1. 创建QTcpSocket对象
        QTcpSocket *tcp = new QtcpSocket;
        // 2. 连接服务器端的IP地址与端口号, 
        //连接成功会发出connected信号。
        //也可以直接调用waitForConnected等待连接的结果。 
        tcp->connectToHost("192.168.250.250", 9999); 
        // 3. 调用对象的read/write函数即可与服务器端进行收发数据了。
        //当服务器端有发数据过来时,会发出readyRead信号,在连接此信号的槽函数里接收数据即可. 


阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页