专注电子技术学习与研究
当前位置:单片机教程网 >> STM32 >> 浏览文章

Rainbow网络通信:一个简单的TCP客户端

作者:白栎旸   来源:本站原创   点击数:  更新时间:2014年04月30日   【字体:

    Rainbow开发包对TCP协议进行了很好的封装,使用起来同样简单,在软件包的“Projects\TCP-Client”文件夹包含了本文的完整工程,可以直接编译、烧写和调试。这个程序主要展示如何通过TCP向服务器端发送字符串,看看main.cpp的代码:

#include "WProgram.h"
#include "Ethernet.h"
#include "EthernetClient.h"
 
//网络模块的MAC地址
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
//网络模块的IP地址
IPAddress ip(192, 168, 1, 15);
 
//定义对方ip和端口
IPAddress serverIp(192, 168, 1, 171);
uint16_t port = 6000;
 
//定义TCP客户端对象
EthernetClient client;
//记录向服务器发送消息的次数,我们的例子只发送5次
uint8_t sendNums = 0;
 
void setup()
{
  //初始化Rainbow
  boardInit();
  //初始化默认串口
  Serial.begin();
  Serial.println("TCP-Client start...");
  //对网络进行初始化
  Ethernet.begin(mac, ip);
  //与服务器三次握手,建立连接
  if(client.connect(serverIp, port))
  {
    Serial.println("TCP client-to-server established...");
  }
}
 
void loop()
{
  //判断是否建立起有效连接
  if(client.connected())
  {
    //发送5次消息后关闭连接
    if(sendNums > 5)
    {
      client.stop();
    }
    client.print("Hello,world!\r\n");
    sendNums++;
    //间隔2秒发送一次
    delay(2000);
  }
}
 
int main()
{
  setup();
  while(1) loop();
}
 
    TCP协议是一个可靠的通信协议,在通信前需要经过三次握手方能建立起连接,连接成功后才能进行可靠的流式通信。和UDP通信相比,TCP通信由于通信前要进行三次握手,每次发送数据完毕要等对方确认(ACK),而UDP只管发送出去,少了协商过程,因此在局域网或者可靠通信的网络环境下通信效率会高于TCP,但是在广域网或者通信质量不太好的环境下,UDP往往不是很可靠,如果要在这种环境下使用UDP可靠通信的话,还需要一些数据收发确认算法(协议)的支持。
 
    Rainbow作为客户端,要和服务器进行通信,需要以下几个步骤:
    1、定义EthernetClient对象:EthernetClient client
    2、调用client.connect(serverIp, port)进行TCP三次握手,握手成功返回true
    3、发送前调用client.connected()判断连接是否有效
    4、通过client中的print、write等方法向服务器发送消息,client是Stream的子类,可以使用Stream中的方法。
    5、发送消息完毕,调用client.stop()关闭连接
 
    上面的程序编译无误后,将程序烧写到Rainbow中,然后在电脑上运行串口调试工具并和Rainbow连接成功,在端口号为6000上启动TCP监听,然后按下Rainbow的复位键,可以在串口调试工具中看到输出的日志,同时,每隔2秒,将在从网络上接收到Rainbow发来的数据,Rainbow发送5次后自动中断和服务器的连接:
关闭窗口

相关文章