<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[【XR806开发板试用】TCP通信测试 &amp;&amp; Ping 命令测试]]></title><description><![CDATA[<p dir="auto"><strong>1.工程准备</strong><br />
由于要使用wifi功能，直接从wlan_demo复制一份出来，然后修改。<br />
源文件只留下 main.c 就可以了。</p>
<p dir="auto"><strong>BUILD.gn文件</strong></p>
<pre><code>import("//device/xradio/xr806/liteos_m/config.gni")

static_library("app_mying") {
   configs = []

   sources = [
      "main.c",
   ]

   cflags = board_cflags

   include_dirs = board_include_dirs
   include_dirs += [
        "//kernel/liteos_m/kernel/arch/include",
        "//utils/native/lite/include",
        "//foundation/communication/wifi_lite/interfaces/wifiservice",
   ]
}
</code></pre>
<p dir="auto"><strong>2. XR806 SDK</strong><br />
仔细看下xr806工程库的结构，<br />
xr806的xr_skylark路径下属于芯片原生驱动库！<br />
该路径下面有各种功能参考示例，如trustzone、net、ping、json等。<br />
因此，直接参考xr_skylark\include下的内容，来实现一些简单的功能。<br />
<img src="/assets/uploads/files/1640308753034-234337dd-f6b5-4426-9972-3a91f9cb9c64.png" alt="234337DD-F6B5-4426-9972-3A91F9CB9C64.png" class=" img-responsive img-markdown" width="623" height="651" /></p>
<p dir="auto"><strong>3.实现的功能</strong></p>
<p dir="auto">0）连接WiFi;<br />
根据自己的SSID和PSK修改，代码直接copy原来的。</p>
<p dir="auto">1）ping服务器，进行联通性测试;<br />
ping一下自己的服务器，根据需要进行修改。</p>
<p dir="auto">include下面有ping/ping.h文件。很简单的一个结构体(如下所示)，看情况就是给个地址，设置一下参数，然后就可以实现ping命令的功能了。</p>
<pre><code>struct ping_data {
    ip_addr_t sin_addr; /* server addr */

    u32_t count;        /* number of ping */
    u32_t data_long;    /* the ping packet data long */
    u32_t interval;     /* Wait interval seconds between sending each packet, default 1s */
    u32_t timeout;      /* Time to wait for a response, in seconds */
    u32_t deadline;     /* Specify a timeout, in seconds, ping thread will stop if timeout */
    u32_t ttl;          /* ttl ping only. Set the IP Time to Live. */

    int run_flag;       /* run flag, 0:stop 1:start */
![CB84C5B5-489A-4f24-BD4D-67909D582B90.png](/assets/uploads/files/1640308813559-cb84c5b5-489a-4f24-bd4d-67909d582b90.png) };

s32_t ping(struct ping_data *data);
</code></pre>
<p dir="auto">2）作为TCP客户端，连接server，发数据;<br />
通过TCP连接服务器，发数据。<br />
设置服务器信息<br />
【地址】（比如：192.168.1.100）<br />
【端口号】（比如5679）<br />
net路径下面有lwip库，借此实现网络通信功能。</p>
<p dir="auto">代码里，通过宏定义的方式，将lwip_xxx改成了与linux下的soket API一样的接口。<br />
参考正常的TCP_Client程序就行了。<br />
<img src="/assets/uploads/files/1640308839414-cb84c5b5-489a-4f24-bd4d-67909d582b90.png" alt="CB84C5B5-489A-4f24-BD4D-67909D582B90.png" class=" img-responsive img-markdown" width="669" height="563" /></p>
<p dir="auto">3）读取一下xr_skylark里的cjson版本信息。<br />
发现有cjson库，然后就随便测试一下。</p>
<p dir="auto"><strong>4.程序示例</strong></p>
<pre><code>#include &lt;stdio.h&gt;
#include &lt;string.h&gt;
#include &lt;stdlib.h&gt;
#include "ohos_init.h"
#include "driver/chip/hal_gpio.h"
#include "kernel/os/os.h"
#include "wifi_device.h"
#include "cjson/cJSON.h"
#include "net/ping/ping.h"
#include "net/lwip-2.1.2/lwip/sockets.h"
#include "net/lwip-2.1.2/lwip/tcp.h"
#include "net/lwip-2.1.2/lwip/inet.h"
#include "net/lwip-2.1.2/lwip/ip_addr.h"

#define WIFI_DEVICE_CONNECT_AP_SSID "ChinaNet-111"
#define WIFI_DEVICE_CONNECT_AP_PSK "111666111"

#define GPIO_OUTPUT_PORT           GPIO_PORT_A

static OS_Thread_t g_main_thread;

static void gpio_output_init(void)
{
    GPIO_InitParam param;
    param.driving = GPIO_DRIVING_LEVEL_1;
    param.mode = GPIOx_Pn_F1_OUTPUT;
    param.pull = GPIO_PULL_NONE;
    HAL_GPIO_Init(GPIO_OUTPUT_PORT, GPIO_PIN_21, &amp;param);//led灯对应IO
}

static void gpio_output_ctl(uint8_t level)
{
    HAL_GPIO_WritePin(GPIO_OUTPUT_PORT, GPIO_PIN_21, level ? GPIO_PIN_HIGH : GPIO_PIN_LOW);
}


void wifi_connect(void)
{
    const char ssid_want_connect[] = WIFI_DEVICE_CONNECT_AP_SSID;
    const char psk[] = WIFI_DEVICE_CONNECT_AP_PSK;

    printf("\n=========== Connect Test Start ===========\n");

    if (WIFI_SUCCESS != EnableWifi()) {
        printf("Error: EnableWifi fail.\n");
        return;
    }
    printf("EnableWifi Success.\n");

    if (WIFI_STA_ACTIVE == IsWifiActive())
        printf("Wifi is active.\n");

    OS_Sleep(1);

    if (WIFI_SUCCESS != Scan()) {
        printf("Error: Scan fail.\n");
        return;
    }
    printf("Wifi Scan Success.\n");

    OS_Sleep(1);

    WifiScanInfo scan_results[30];
    unsigned int scan_num = 30;

    if (WIFI_SUCCESS != GetScanInfoList(scan_results, &amp;scan_num)) {
        printf("Error: GetScanInfoList fail.\n");
        return;
    }

    WifiDeviceConfig config = { 0 };
    int netId = 0;

    int i;
    for (i = 0; i &lt; scan_num; i++) {
        if (0 == strcmp(scan_results[i].ssid, ssid_want_connect)) {
            memcpy(config.ssid, scan_results[i].ssid,
                   WIFI_MAX_SSID_LEN);
            memcpy(config.bssid, scan_results[i].bssid,
                   WIFI_MAC_LEN);
            strcpy(config.preSharedKey, psk);
            config.securityType = scan_results[i].securityType;
            config.wapiPskType = WIFI_PSK_TYPE_ASCII;
            config.freq = scan_results[i].frequency;
            break;
        }
    }

    if (i &gt;= scan_num) {
        printf("Error: No found ssid in scan_results\n");
        return;
    }
    printf("GetScanInfoList Success.\n");

    if (WIFI_SUCCESS != AddDeviceConfig(&amp;config, &amp;netId)) {
        printf("Error: AddDeviceConfig Fail\n");
        return;
    }
    printf("AddDeviceConfig Success.\n");

    if (WIFI_SUCCESS != ConnectTo(netId)) {
        printf("Error: ConnectTo Fail\n");
        return;
    }
    printf("ConnectTo Success\n");

    OS_Sleep(3);

    WifiLinkedInfo get_linked_res;

    if (WIFI_SUCCESS != GetLinkedInfo(&amp;get_linked_res)) {
        printf("Error: GetLinkedInfo Fail\n");
        return;
    }
    printf("GetLinkedInfo Success.\n");

    printf("ssid: %s\n", get_linked_res.ssid);
    printf("bssid: ");
    for (int j = 0; j &lt; WIFI_MAC_LEN; j++) {
        printf("%02X", get_linked_res.bssid[j]);
    }
    printf("\n");
    printf("rssi: %d\n", get_linked_res.rssi);

    unsigned char get_mac_res[WIFI_MAC_LEN];

    if (WIFI_SUCCESS != GetDeviceMacAddress(get_mac_res)) {
        printf("Error: GetDeviceMacAddress Fail\n");
        return;
    }
    printf("GetDeviceMacAddress Success.\n");
    for (int j = 0; j &lt; WIFI_MAC_LEN - 1; j++) {
        printf("%02X:", get_mac_res[j]);
    }
    printf("%02X\n", get_mac_res[WIFI_MAC_LEN - 1]);
}
struct ping_data ping_t;
//ping命令参数设置
void ping_init()
{
    ip_addr_t server_ip;
    inet_aton("129.204.63.27", &amp;server_ip);
    ping_t.sin_addr = server_ip;
    ping_t.count = 0xF;
    ping_t.data_long = 512;
    ping_t.timeout = 30;
    ping_t.run_flag = 1;
}

//TCP SOCKET
int s;
void tcp_test_init()
{
//socket create!
    s  = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);

//address info!
    struct sockaddr_in server_addr;

    memset(&amp;server_addr, 0, sizeof(server_addr));

    server_addr.sin_family = AF_INET;
    server_addr.sin_port = htons(5679);
    inet_pton(AF_INET, "192.168.1.100", &amp;server_addr.sin_addr);

//connect!
    if(connect(s,(void *)&amp;server_addr,sizeof(server_addr)) &lt; 0) {
        printf("connect tcp_server failed! \r\n");
    } else {
        printf("connect tcp_server successfuly! \r\n");
    }
// send data
    send(s, "xr806\n", 7, 0);
}
static void MainThread(void *arg)
{
    gpio_output_init();
    wifi_connect();
    ping_init();
    ping(&amp;ping_t);

    tcp_test_init();
    char buf[32];
    int cnt = 0;
    while(1) {
        sprintf(buf,"XR806:%s : %d \r\n",cJSON_Version(), cnt++);
        //向服务器发送数据
        send(s,buf, sizeof(buf), 0);
        printf("%s:Hello XR806 \r\n",__func__);
        
        gpio_output_ctl(1);
        OS_Sleep(1);
        gpio_output_ctl(0);
        OS_Sleep(1);
    }
}

void WifiTestMain(void)
{
    printf("Wifi Test Start\r\n");

    if (OS_ThreadCreate(&amp;g_main_thread, "MainThread", MainThread, NULL,
                        OS_THREAD_PRIO_APP, 4 * 1024) != OS_OK) {
        printf("[ERR] Create MainThread Failed\n");
    }
}

SYS_RUN(WifiTestMain);
</code></pre>
<p dir="auto"><strong>5.结果展示</strong><br />
通过网络调试工具，建立TCP服务器，接收到了xr806发来的数据。</p>
<p dir="auto"><img src="/assets/uploads/files/1640308871583-d91c2b61-5e2e-4a60-92a2-8d51c581d798.png" alt="D91C2B61-5E2E-4a60-92A2-8D51C581D798.png" class=" img-responsive img-markdown" width="690" height="501" /><br />
串口打印信息</p>
<pre><code>[net INF] netif (IPv4) is up
[net INF] address: 192.168.1.110
[net INF] gateway: 192.168.1.1
[net INF] netmask: 255.255.255.0
[net INF] msg &lt;network IPv6 state&gt;
GetLinkedInfo Success.
ssid: ChinaNet-111
bssid: 5475956E3374
rssi: 110
GetDeviceMacAddress Success.
9C:9E:49:BA:5B:01
PING 129.204.63.27 520 bytes of data.
Request timeout for icmp_seq=1
512 bytes from 129.204.63.27: icmp_seq=2    time=43 ms
512 bytes from 129.204.63.27: icmp_seq=3    time=43 ms
512 bytes from 129.204.63.27: icmp_seq=4    time=44 ms
512 bytes from 129.204.63.27: icmp_seq=5    time=43 ms
512 bytes from 129.204.63.27: icmp_seq=6    time=45 ms
512 bytes from 129.204.63.27: icmp_seq=7    time=46 ms
512 bytes from 129.204.63.27: icmp_seq=8    time=44 ms
512 bytes from 129.204.63.27: icmp_seq=9    time=44 ms
512 bytes from 129.204.63.27: icmp_seq=10    time=44 ms
512 bytes from 129.204.63.27: icmp_seq=11    time=44 ms
512 bytes from 129.204.63.27: icmp_seq=12    time=44 ms
512 bytes from 129.204.63.27: icmp_seq=13    time=44 ms
512 bytes from 129.204.63.27: icmp_seq=14    time=44 ms
512 bytes from 129.204.63.27: icmp_seq=15    time=43 ms

--- 129.204.63.27 ping statistics ---
15 packets transmitted, 14 received, 6% packet loss, time 672ms
rtt min/avg/max/mdev = 43/43/46/3 ms
connect tcp_server successfuly! 
MainThread:Hello XR806 
MainThread:Hello XR806
</code></pre>
<p dir="auto">文章转自极术社区：<a href="https://aijishu.com/a/1060000000286996" target="_blank" rel="noopener noreferrer nofollow ugc">https://aijishu.com/a/1060000000286996</a><br />
作者：Pingyang <a class="plugin-mentions-user plugin-mentions-a" href="https://bbs.aw-ol.com/uid/404">@Pingyang</a></p>
]]></description><link>https://bbs.aw-ol.com/topic/846/xr806开发板试用-tcp通信测试-ping-命令测试</link><generator>RSS for Node</generator><lastBuildDate>Sat, 16 May 2026 18:01:21 GMT</lastBuildDate><atom:link href="https://bbs.aw-ol.com/topic/846.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 24 Dec 2021 01:22:03 GMT</pubDate><ttl>60</ttl></channel></rss>