(1)篇里面代码没完全贴出,有些同学说没看明白。今天又闲的蛋疼,无聊弄个服务端跟客户端整在一个程序上的例子。

代码跟一篇有点相同,但是又有点不同。先贴出效果图。。。

为了效果明显,我一个在linux 下,一个在xp下运行。

代码如下:

头文件

#ifndef NETWORKTCP_H
#define NETWORKTCP_H
#include <QMainWindow>
#include <QtNetwork/QTcpServer>
#include <QtNetwork/QTcpSocket>
#include <map>
#include <iostream>
#include <QMessageBox>
using namespace std;
namespace Ui {
class NetworkTcp;
}
class NetworkTcp : public QMainWindow
{
Q_OBJECT
public:
explicit NetworkTcp(QWidget *parent = 0);
~NetworkTcp();
QTcpServer *m_pTcpServer;
QTcpSocket *m_pTcpSocket;
map<int,QTcpSocket*> map_TcpSocket;
QTcpSocket *pTcpSocketServer;
QTcpSocket *pTcpSocketClient;
bool isServer;
private:
Ui::NetworkTcp *ui;
private slots:
void slotStartServer();
void slotConnectServer();
void slotSendMesg();
void slotNewConnect();
void slotReadMesg();
};
#endif // NETWORKTCP_H

源文件

#include "NetworkTcp.h"
#include "ui_networktcp.h"
NetworkTcp::NetworkTcp(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::NetworkTcp)
{
ui->setupUi(this);
isServer= true;     //默认服务端
this->connect(ui->pushButton_StartServer,SIGNAL(clicked()),this,SLOT(slotStartServer()));
this->connect(ui->pushButton_ConnectServer,SIGNAL(clicked()),this,SLOT(slotConnectServer()));
this->connect(ui->pushButton_Send,SIGNAL(clicked()),this,SLOT(slotSendMesg()));
}
NetworkTcp::~NetworkTcp()
{
delete ui;
}
void NetworkTcp::slotStartServer()  //启动服务器
{
isServer = true;
ui->pushButton_ConnectServer->setEnabled(false);
ui->lineEdit_IP->setEnabled(false);
ui->lineEdit_NetPort->setEnabled(false);
m_pTcpServer = new QTcpServer();
m_pTcpServer->listen(QHostAddress::Any,19999);
this->connect(m_pTcpServer,SIGNAL(newConnection()),this,SLOT(slotNewConnect()));
}
void NetworkTcp::slotNewConnect()
{
//    QTcpSocket *pTcpSocket;
pTcpSocketServer =  m_pTcpServer->nextPendingConnection();
//    pTcpSocketTemp = pTcpSocket;
//    int sockfd = pTcpSocketTemp->socketDescriptor();
//    map_TcpSocket.insert(make_pair(sockfd,pTcpSocket));
this->connect(pTcpSocketServer,SIGNAL(readyRead()),this,SLOT(slotReadMesg()));
}
void NetworkTcp::slotReadMesg() //读取信息
{
//    int sockfd = pTcpSocketTemp->socketDescriptor();
if(isServer == true)
{
QByteArray qba= pTcpSocketServer->readAll(); //读取
QString ss=QVariant(qba).toString();
QHostAddress ip = pTcpSocketServer->peerAddress();
QString qStrSendInfo = ip.toString()+" : "+ss;
ui->textEdit_Info->append(qStrSendInfo);
}
else if(isServer == false)
{
QByteArray qba= pTcpSocketClient->readAll(); //读取
QString ss=QVariant(qba).toString();
QHostAddress ip = pTcpSocketClient->peerAddress();
QString qStrSendInfo = ip.toString()+" : "+ss;
ui->textEdit_Info->append(qStrSendInfo);
}
}
void NetworkTcp::slotConnectServer()    //连接服务器
{
if(ui->lineEdit_IP->text().isEmpty() ||ui->lineEdit_NetPort->text().isEmpty())
{
QMessageBox::warning(this,tr("Warning"),tr("Please input IP OR NetPort!"));
return;
}
isServer = false;
ui->pushButton_StartServer->setEnabled(false);
pTcpSocketClient = new QTcpSocket(this);
pTcpSocketClient->abort();
QString qStrIP = ui->lineEdit_IP->text();
quint16 netport = ui->lineEdit_NetPort->text().toInt();
pTcpSocketClient->connectToHost(qStrIP,netport);
connect(pTcpSocketClient,SIGNAL(readyRead()),this,SLOT(slotReadMesg()));
}
void NetworkTcp::slotSendMesg() //发送消息
{
QString strMesg= ui->lineEdit_sendmsg->text();
ui->lineEdit_sendmsg->clear();
if(isServer == true)
{
pTcpSocketServer->write(strMesg.toStdString().c_str(),strlen(strMesg.toStdString().c_str()));
}
else if(isServer == false)
{
pTcpSocketClient->write(strMesg.toStdString().c_str(),strlen(strMesg.toStdString().c_str()));
}
}

我一直想知道QQ发信息是怎么弄的,到现在还是没想明白里面的流程。。。唉。。。

希望懂的人一起交流交流。。。

Qt之QTcpServer/QTcpSocket简单收发信息(2)相关推荐

  1. Qt之QTcpServer/QTcpSocket简单收发信息(1)

    用QT包装好的东西做socket类东西,我只能说啥这么简单呢. waitForConnected() 等待链接的建立 waitForReadyRead() 等待新数据的到来 waitForBytesW ...

  2. QTcpServer / QTcpSocket 简单示例

    先看服务端 #include <QObject> #include <QTcpServer> #include <QTcpSocket>class CTcpServ ...

  3. Qt的QTcpServer连接后跨线程接收数据,即跨线程传递使用QTcpSocket连接对象

    Qt QTcpServer类一个类(线程)listen监听连接,另一个类(线程)收发数据. Qt规定,QTcpSocket不能作为参数传递.如果做参数传递,编译时就会报错提示. 用server端获取到 ...

  4. Qt TCP协议 传输简单字符串实例

    TCP协议的程序使用的是客户端/服务器模式,在Qt中提供了QTcpSocket类来编写客户端程序,使用QTcpServer类编写服务器端程序. A 转载:http://mobile.51cto.com ...

  5. QT文件传输(简单版)

    QT文件传输(简单版) QT文件传输(简单版) 这是用QT写的一篇简单的文件传输,只是考虑了黏包问题,并没有考虑进度条和线程问题 一.原理图 二.服务器端TCPSocket通信连接 Pro中加netw ...

  6. Qt开发中获取系统相关信息的方法,值得收藏参考

    本文转自https://zhuanlan.zhihu.com/p/111005951,这篇写的很详细,但是macos相关的只有一部分太少了,基本都是Windows的,我个人后续也会把相关的系统调用方式 ...

  7. C++、Qt 调用 lua 完成简单计算并得到结果( 出现中文 ‘?’问题)

    C++.Qt 调用 lua 完成简单计算并得到结果( 出现中文 '?'问题) 这几天有个小项目需要在运行过程中加载 lua 代码根据 C++ 传入的值 计算并返回计算结果和字符串,遇到一个烦心的问题, ...

  8. SDUc++课结课大作业:基于qt类库c++实现简单的音乐播放器

    2021年11月的项目,版本一,功能简单,UI界面难看,代码架构拉跨,没有核心内容,技术含量低 2022年6月21日准备重构一下代码,让架构清晰一点,加点多线程和网络通信的内容,然后这次打算在visu ...

  9. Qt 使用#define+qDebug()输出调试信息

    /******************************************************************************************** Qt 使用# ...

最新文章

  1. oracle+linux+oel+6.9,用SecureCRT+Xming轻松远程实现linux的X DISPLAY
  2. layui 自定义排序_浅谈layui中table的sort排序
  3. “面试不败计划”:各大公司Java后端开发面试题总结
  4. 工作259:uni--页面--验证码添加
  5. python 基础知识点整理 和具体应用
  6. 3 计算机组成原理第三章 存储系统 主存简单模型及寻址 半导体寄存器 存储器分类 主存与CPU连接 双口RAM和多模块寄存器
  7. 被新基建点名的大数据,有哪些书最值得读?
  8. GBDT和XGBoost
  9. python os.walk遍历目录_Python 用 os.walk 遍历目录
  10. 【Objective-C】05-第一个OC的类
  11. 抢光儿童餐,是这届95后最后的倔强
  12. php为什么凉了_马蜂窝裁php换java,php又又又凉凉了吗
  13. Halcon教程十:把Halcon程序放入WPF程序里
  14. ps html切图教程,#PS教程:你所不知道的Photoshop CC快速切图的方法
  15. Windows2003搭建IIS网站
  16. 解决vscode下载慢的问题
  17. python 广告联盟_谷歌广告月入10000美金的一些经验谈
  18. 键盘右边数字键不能用,只能当方向键使用
  19. java 将set转成数组,Java程序将Set转换为数组
  20. 如何利用蜂鸣器制作MIDI音乐

热门文章

  1. Android——Android逆向工具
  2. 游戏设计师如何进行游戏分析?
  3. 软件测试项目截图,软件测试缺陷报告的屏幕截图处理
  4. 清华斯维尔发布新版安装算量与鲁班形成PK局面
  5. swif tableview全选
  6. 整数相除保留两位小数的一些方法
  7. 互联网舆情平台功能介绍
  8. hadoop 入门介绍(大数据介绍)
  9. 全国计算机高新技术会计软件,全国计算机信息高新技术考试会计软件应用(用友软件系列)操作员级考试考试大纲...
  10. ECharts地图应用图片定位