Qt:简易的TCP服务器和客户端
来源:互联网 发布:剑灵天女短发捏脸数据 编辑:程序博客网 时间:2024/05/21 17:52
请读者注意:该服务器,客户端实现的是简单的消息传递,并不能进行文件传输,在发送和接受消息的函数上进行了极大的简化;
(每一个合格的程序员都在耐心的分析每一行代码)
**服务器端:
头文件:**
#ifndef WIDGET_H#define WIDGET_H#include <QTcpServer>#include <QTcpSocket>#include <QString>#include <QWidget>namespace Ui {class Widget;}class Widget : public QWidget{ Q_OBJECTpublic: explicit Widget(QWidget *parent = 0); ~Widget();private: Ui::Widget *ui;//##服务器##private: QTcpServer *tcpServer; QTcpSocket *tcpSocket;private slots: void creatConnection(); //创建一个新连接 void useConnection(); //使用当前连接 void receiveMessage(); //接收消息};#endif // WIDGET_H
源文件:
//构造函数:Widget::Widget(QWidget *parent) :QWidget(parent), ui(new Ui::Widget){ //服务器 tcpServer = new QTcpServer(this); //服务器监听类 if(!tcpServer->listen(QHostAddress::Any,12345)) //服务器监听本机所有IP的12345端口 { qDebug() << tcpServer->errorString(); //Debug出错误信息 tcpServer->close(); //关闭监听 } //关联信号,当有新到的连接时,执行槽函数 connect(tcpServer,SIGNAL(newConnection()),this,SLOT(creatConnection())); /* newConnection() 当有连接到来时发送该信号 */}
//creatConnection(): 槽函数void Widget::creatConnection() //槽函数:创建连接{ /* 注意: TcpServer类和TcpSocket类使用区别 我们一般使用TcpServer来监听端口; 使用TcpSocket来与客户端建立连接并传递数据; */ tcpSocket = new QTcpSocket(this); //socket类 //获取监听类里到来的 连接套接字 tcpSocket = tcpServer->nextPendingConnection(); tcpServer->close(); //关闭监听类 useConnection(); //在这个函数中使用连接套接字}
//useConnection():槽函数void Widget::useConnection(){ //当函数执行到这里时,表明连接已经成功 //在界面textBrowser中插入纯文本,注意:插入的纯文本类型为QString; ui->textBrowser->insertPlainText("connection succeed.\n"); //当缓冲区有数据可读时,执行槽函数 connect(tcpSocket,SIGNAL(readyRead()),this,SLOT(receiveMessage())); /* readyRead(); //当有数据要读的时候,会触发该信号 有数据可读指的是,客户端发送数据已经存在于服务器端的缓冲区中,只要 缓冲区中存在数据了,该信号就会被触发 */}
//receiveMessage():槽函数void Widget::receiveMessage() //槽函数:接收消息{ //读取全部数据; 返回类型为QByteArray QByteArray receiveDate = tcpSocket->readAll(); QString temp = receiveDate; ui->textBrowser->insertPlainText(temp); /* 插入纯文本是QString类型,我们用temp接收receiceDate; */}
**服务器端已经编写完毕,下面是客户端:
头文件:**
#ifndef LANCLIENT_H#define LANCLIENT_H#include <QWidget>#include <QTcpSocket>namespace Ui {class LANClient;}class LANClient : public QWidget{ Q_OBJECTpublic: explicit LANClient(QWidget *parent = 0); ~LANClient();private slots: void useConnection(); void sendMessage();private: Ui::LANClient *ui;private: QTcpSocket *clientSocket; QString message;};#endif // LANCLIENT_H
源文件:
//构造函数:LANClient::LANClient(QWidget *parent) : QWidget(parent), ui(new Ui::LANClient){ ui->setupUi(this); clientSocket = new QTcpSocket(this); clientSocket->abort(); //断开之前的连接,保证当前连接是正确的 //连接到服务器,当前用的是测试ip clientSocket->connectToHost("127.0.0.1",12345); /* 如果是在两个不同的机子上,这里的地址应该写服务器的ip; 可以通过运行命令行,cmd,然后输入ipconfig查看服务器的ip */ //当连接成功时,会触发connected()这个信号,我们执行槽函数 connect(clientSocket,SIGNAL(connected()),this,SLOT(useConnection()));}
//useConnection() : 槽函数void LANClient::useConnection(){ //向服务器发送消息 clientSocket->write("succeed!"); //获取远程主机(也就是服务器端)的ip地址和端口号,peer代表远程主机 QHostAddress address = clientSocket->QAbstractSocket::peerAddress(); qint16 port = clientSocket->QAbstractSocket::peerPort(); //控制台输出信息 qDebug() << address << endl << port << endl;}
1 0
- Qt:简易的TCP服务器和客户端
- go简易tcp socket客户端和服务器
- QT 之 TCP/IP 服务器和客户端(一)
- QT 之 TCP/IP 服务器和客户端(二)(简单的字符串传递版本)
- TCP实现客户端和服务器的通信
- 简单的TCP服务器和客户端
- Java基于TCP的简易Web浏览器和服务器
- Qt TCP客户端无法连接服务器
- TCP服务器和客户端交互
- TCP客户端和服务器介绍
- 服务器和客户端 tcp通信
- Go语言(服务器开发):简易TCP客户端与服务端
- 简易socket客户端和多线程服务器实现
- go简易udp客户端和服务器
- Python 简易TCP客户端
- 基于TCP的服务器和客户端的简单收发Demo
- QT 之 TCP/IP 服务器和客户端(三)(数据流出流入操作版本)
- tcp和udp多线程的epoll服务器+客户端源代码
- dynamic_cast运算符
- eclipse快捷键 包括查找类、方法、变量
- EasyHook远程代码注入
- 维护篇 07. 升级系统固件至 5.6 ❀ 飞塔 (Fortinet) 防火墙
- 661
- Qt:简易的TCP服务器和客户端
- Progress(项目中比较实用进度条)
- VirtualBox的CentOS虚拟机安装增强包
- TensorFlow学习笔记6----tf.contrib.learn Quickstart
- idea报duplicate context path '/'
- win7系统下安装centos7
- 树的存储结构-双亲表示法-代码
- maven实现打包带源代码的jar包
- ps之黑白图制作