天嵌 ARM开发社区

 找回密码
 注册
查看: 1953|回复: 0

【天嵌科技TQIMX6UL_BASEB开发板试用体验】+Tcp通信

[复制链接]
非也 发表于 2018-1-3 10:04:54 | 显示全部楼层 |阅读模式
TCP是一种面向连接的,可靠的,基于字节流的传输层通信协议。TCP的工作过程可以分为三个阶段:
  一、连接的建立——TCP的连接建立就像打电话一样,我们打电话时,拨一个号码的号码并不是立即就可以接通的,期间会有一个“嘟 嘟”的呼叫过程,这就好比是TCP协议的连接的建立阶段。当我们用TCP编写的程序,必须先建立TCP连接。TCP协议的连接建立通过三次握手来完成的。
  二、传输数据——利用TCP传输数据时,数据是以字节流的形式进行传输,客户端与服务器端建立连接后,发送方需要先将发送的数据转换为字节流,然后将其发送给对方,发送数据时,可以通过程序不断地将数据流陆续写入TCP的发送缓冲中,然后TCP自动从发送缓冲中提取一定量的数据,将其组成TCP报文段发送到IP层,再通过IP层(也就是网络层)之下的网络接口发送出去;接受端从IP层接收到TCP报文段后,将其暂时保存在接受缓冲中,然后我们通过程序依次读取接受缓冲中的数据,从而达到相互通信的目的。
  三、断开连接——发送完数据之后,最后就是断开连接了。
  今天使用天嵌科技TQIMX6UL_BASEB开发板来完成一个TCP的简单通信,先上张图:
在做这个项目的时候终于把标题问题解决了,自己开个窗口写标题;布局图如下:

这种带交互输入的界面首要解决的问题是输入法问题,这问题堵了我好久。
  最后移植qt网上一个前辈的终于把问题解决:
  接下来说代码:
  1. Widget::Widget(QWidget *parent) :
  2.   QWidget(parent),
  3.   ui(new Ui::Widget)
  4.   {
  5.   ui->setupUi(this);
  6.   initForm();
  7.   tcpSocket = new QTcpSocket(this);
  8.   connect(tcpSocket, &QTcpSocket::connected, this, &Widget::client_connected);
  9.   connect(tcpSocket, &QTcpSocket::disconnected, this, &Widget::client_disconnected);
  10.   connect(tcpSocket, &QTcpSocket::readyRead, this, &Widget::client_readdata);
  11.   }
复制代码

先创建了一个socket,然后设置啦几个槽函数。分别处理连接,断开连接和有数据的时候需要处理的问题。
  看下连接按钮的槽函数:
  1. void Widget::on_buttonLink_clicked()
  2.   {
  3.   if (ui->buttonLink->text() == tr("连接")) {
  4.   QString ip;
  5.   quint16 port;
  6.   //获取ip地址
  7.   ip = ui->lineEditIpaddr->text();
  8.   //获取端口号
  9.   port = ui->lineEditPort->text().toInt();
  10.   //连接服务器
  11.   tcpSocket->connectToHost(ip, port);
  12.   } else {
  13.   tcpSocket->disconnectFromHost();
  14.   ui->buttonLink->setText("连接");
  15.   ui->buttonSend->setEnabled(false);
  16.   ui->textEditReceive->append("连接已断开");
  17.   }
  18.   }
复制代码

很简单,大家看下注释。
  1. void Widget::client_connected()
  2.   {
  3.   ui->textEditReceive->setText("成功建立连接");
  4.   ui->buttonLink->setText("断开连接");
  5.   //使能发送按钮
  6.   ui->buttonSend->setEnabled(true);
  7.   }
  8.   void Widget::client_disconnected()
  9.   {
  10.   ui->buttonLink->setText("连接");
  11.   ui->textEditReceive->append("连接已断开");
  12.   ui->buttonSend->setEnabled(false);
  13.   }
  14.   void Widget::client_readdata()
  15.   {
  16.   QByteArray array;
  17.   array = tcpSocket->readAll();
  18.   ui->textEditReceive->append(array);
  19.   }
复制代码

下面演示效果如下:
  先在电脑上开个tcp服务器,监听8080端口,等待连接,连接成功如下:

在开发板上运行的客户端如下:

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

i.MX8系列ARM cortex A53 M4 工控板上一条 /1 下一条

Archiver|手机版|小黑屋|天嵌 嵌入式开发社区 ( 粤ICP备11094220号 )

GMT+8, 2024-4-26 17:40 , Processed in 1.078125 second(s), 19 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表