前言

前一个博客,试了TCP的服务器与客户端的连接与断开,接下就是客户端与服务器互发信息。

客户端

1.往服务器发送信息

//发送消息
void Client::on_buttonSendMessage_clicked()
{QString data = ui->textEditInput->toPlainText();if(data.length() != 0){tcpClient->write(data.toLatin1());ui->textEditInput->clear();ui->textEditStatus->append("发送文本消息成功!");data.clear();}else{ui->textEditStatus->append("不能发送空的消息!");}}

当客户端连接上服务器之后,在输入窗口下输入文字(英文),然后点发送按键,信息往服务器发送。
2.接收来自服务器的信息
2.1 在构造函数里添加一个槽函数做接收到信息的事件响应

    connect(tcpClient, SIGNAL(readyRead()), this, SLOT(readServerMessage()));

2.1 实现这个槽函数,接收信息并显示出来

//接收服务器端的信息并显示
void Client::readServerMessage()
{QByteArray buffer = tcpClient->readAll();if(!buffer.isEmpty()){ui->textEditAccept->append(buffer);}
}

服务器

1.在服务器要加上有新客户端连接时的槽函数

//有新的连接时的槽函数connect(tcpServer,SIGNAL(newConnection()),this, SLOT(newConnectionSlot()));

槽函数实现

//有新客户端连接时
void Server::newConnectionSlot()
{//返回套接字指针currentClient = tcpServer->nextPendingConnection();tcpClient.append(currentClient);ui->comboBoxIP->addItem(tr("%1:%2").arg(currentClient->peerAddress().toString().split("::ffff:")[1])\.arg(currentClient->peerPort()));//读取消息处理connect(currentClient, SIGNAL(readyRead()), this, SLOT(readMessageData()));
}

2.接收来自客户端的信息并显示出来

//接收消息并显示到界面
void Server::readMessageData()
{for(int i = 0; i < tcpClient.length(); i++){QByteArray buffer = tcpClient.at(i)->readAll();if(buffer.isEmpty()){ui->textEditStatus->append("接收的消息为空!");}else{ui->textEditAccept->append(buffer);ui->textEditStatus->append("接收消息成功!");}}
}

3.往客户端发送信息,这里有两种可能,一是只要连接上的客户端都发,二是指定客户端来发送,就是绑死客户端的IP地址。

//往客户端发送信息
void Server::on_buttonSendMessage_clicked()
{QString input_data = ui->textEditInput->toPlainText();if(input_data.isEmpty()){ui->textEditStatus->append("不能发送空的信息!");return;}//如果选择全部发送信息if(ui->comboBoxIP->currentIndex() == 0){for(int i = 0; i < tcpClient.length(); i++){tcpClient.at(i)->write(input_data.toLatin1());ui->textEditStatus->append("信息发送成功!");ui->textEditInput->clear();input_data.clear();}}//指定接收的客户端else{//得到选择的IP地址QString client_IP = ui->comboBoxIP->currentText().split(":").at(0);//得到端口int client_port = ui->comboBoxIP->currentText().split(":").at(1).toInt();//遍历连接到的客户端for(int i = 0; i < tcpClient.length(); i++){if(tcpClient[i]->peerAddress().toString().split("::ffff:")[1]==client_IP\&& tcpClient[i]->peerPort()==client_port){tcpClient.at(i)->write(input_data.toLatin1());ui->textEditStatus->append("发送信息到:"+client_IP+"成功!");//ui->textEditInput->clear();input_data.clear();return; //ip:port唯一,无需继续检索}}}
}

测试

运行服务器与客户端,并点击监听与连接,开始互发信息
运行效果如下:

以上是就是一个服务器与客户端的初步框架,还缺少了互相传送图像,上传下载文件这两个功能,还有异常处理机制,心跳检测,多线程等需要完善。

Qt网络编程——TCP服务器与客户端互发信息相关推荐

  1. QT网络编程——TCP服务器和客户端通信

    目录 一.服务器端 1.QT中TCP服务器的开发思路 2.QT服务器界面设计 3.QT服务器代码实现 二.客户端 1.QT中TCP客户端的开发思路 2.QT客户端界面设计 3.QT客户端代码实现 网络 ...

  2. Qt网络编程——TCP

    Qt网络编程--TCP 1. 概念 2. 服务器 3. 客户端 4. TCP服务器和客户端互传文件 5. 资源下载 1. 概念 TCP(Transmission Control Protocol, 传 ...

  3. qt android 网络编程实例,QT网络编程Tcp下C/S架构的即时通信实例

    先写一个客户端,实现简单的,能加入聊天,以及加入服务器的界面. #ifndef TCPCLIENT_H #define TCPCLIENT_H #include #include #include # ...

  4. 【Linux】socket网络编程之服务器与客户端的数据交互

    [Linux]socket网络编程之服务器与客户端的数据交互 前言参考 argc !=2是什么意思 inet pton函数 对stdin,stdout 和STDOUT_FILENO,STDIN_FIL ...

  5. Linux下TCP网络编程-创建服务器与客户端

    一.前言 互联网概念诞生于20世纪60年代末,从9几年中国接入互联网开始到现在,生活的每个角落都能看到网络的使用.现在物联网时代.共享经济的到来,生活中不仅仅电脑.手机可以接入网络,身边的各个设备也能 ...

  6. 服务器端和客户端互发消息,Socket编程实现简单的服务器与客户端互发消息

    socket编程的大致步骤如下: 1.创建服务器端SocketServer,并定义SocketServer的监听端口; 2.ServerSocket调用accept( )方法,是指处于阻塞: 3.创建 ...

  7. python网络编程---TCP服务器

    0x01 环境 python2 pycharm 0x02 程序 客户端程序: # -*- coding:UTF-8 -*- import socket ''' target_host='www.bai ...

  8. QT入门第七天 网络编程TCP/IP/UDP+Http和JSON解析+qt事件软键盘【CSDN最详细】

    网络编程+Http和JSON解析+qt事件软键盘 第一章 QT中的网络编程 [1]涉及到的类 [2]tcp协议的流程 [2.1]服务器的流程 socket-->bind-->listen- ...

  9. Qt 零基础设计实现TCP服务器和客户端上位机(零基础实战详解,附源码文件)

    文章目录 TCP和UDP TCP的三次握手和四次分手 TCP和UDP的区别 关于Socket(套接字) Qt TCP服务器的设计与实现 使用Qt的 帮助 TCP服务器和客户端 区别 UI界面设计和原则 ...

最新文章

  1. linux操作系统-设置静态ip
  2. Linux 操作系统原理 — 进程与线程管理
  3. PAT天梯赛 L1-050 倒数第N个字符串
  4. C# 解决LISTVIEW控件显示数据出现闪屏的问题
  5. Ubuntu设置环境变量
  6. svn+post-commit实现自动部署(转)
  7. 2017-12-09 JavaScript实现ZLOGO子集: 测试用例
  8. 回复《论WEB标准专家》。
  9. Freebsd上使用pf防火墙
  10. 微信支付商户平台扫码登录说明
  11. linux 下MySQL本地安装mysql - u root - p 无法登入
  12. React启动时报Plugin “react“ was conflicted between “package.json ......错误的解决办法。
  13. 港科夜闻|香港科大彭倩教授分析疫情下企业如何减低投资损失
  14. java捕鱼源码,java实现捕鱼达人
  15. 华为员工爆料,这个岗位要开始大量招人了!!!
  16. UVa:10074 Take the Land
  17. CodeForces - 855B - Marvolo Gaunt's Ring(线段树 or DP)
  18. Nginx——nginx作为静态资源web服务(配置语法)
  19. 上墙抽奖php代码,微信帐号开发:独立PHP微信上墙|微信墙|微信抽奖完美版(PHP源码)...
  20. WowLua学习笔记

热门文章

  1. 链表的有序集合_JAVA
  2. 编程之美求二进制数中1的个数扩展题
  3. An overview of gradient descent optimization algorithms
  4. 人工智能与模式识别 --中国计算机学会推荐国际学术刊物
  5. OpenCV HOGDescriptor 参数图解
  6. 《漫画算法》源码整理-4 大顶堆 小顶堆 优先队列
  7. JAVA程序员看C#的精华与糟粕
  8. 使用 Equinox 开发 OSGi 应用程序
  9. JavaScript中数组使用总结
  10. Java程序员从笨鸟到菜鸟之(七十八)细谈Spring(七)spring之JDBC访问数据库及配置详解