Qt实现TCP通信(QQ聊天,带源码)

一、客户端
客户端使用Qt中的QTCPSocket类与服务器进行通信可分为5个步骤:
①创建QTcpSocket套接字对象
socket = new QTcpSocket();

②使用这个对象连接服务器
socket->connectToHost(IP, port);

③使用write函数向服务器发送数据
socket.write(data);

④当socket接收缓冲区有新数据到来时,会发出readyRead()信号,因此将信号绑定到socketReadSlot()槽函数以读取数据
QByteArray buffer;
buffer = socket->readAll();

⑤断开与服务器的连接
socket->disconnectFromHost();

二、服务器
服务器用到QTcpSocket类和QTcpServer类,可分为6个步骤:
①创建QTcpServer对象
server= new QTcpServer();

②侦听一个端口,使得客户端可以使用这个端口访问服务器
server->listen(QHostAddress::Any, port)

③当服务器被客户端访问时,会发出newConnection()信号,因此为该信号添加槽函数,并用一个QTcpSocket对象接受客户端访问
socket = server->nextPendingConnection();

④使用socket的write函数向客户端发送数据
socket.write(data);

⑤当socket接收缓冲区有新数据到来时,会发出readRead()信号,因此为该信号添加槽函数以读取数据
QByteArray buffer;
buffer = socket->readAll();

⑥取消侦听
server->close();

三、简陋界面风格、代码、功能
功能:局域网内实现服务器与客户端通信,如需实现客户端之间的通信,可使用服务器作为消息转发,请自行实现,另外本文只实现基本的文字聊天等功能,图片以及文件的发送,时间原因暂未实现,已预留接口,有兴趣的可以实现相应功能。

下面是效果图
Qt实现TCP通信(QQ聊天,带源码)_第1张图片
Qt实现TCP通信(QQ聊天,带源码)_第2张图片
从界面上基本可以看到相应的功能,可以使用右键菜单或图标点击的方式。
右键功能可以自定义添加,图标含义说明一下,从左至右依次是:
字体选择设置、字体颜色设置、加粗、斜体、选择图片、选择文件、窗口抖动、窗口截屏。

本文仅供学习使用,所以各方面都比较粗糙,代码部分也仅是基本功能的探索,并未设计架构以及异常处理来保障程序的健壮,另外,在线程方面也只是简单的单线程。

代码:https://github.com/Hhuazai/Qt-TCP

你可能感兴趣的:(QT,TCP通信,服务器和客户端)