如何通过FreeRTOS + lwip发送数据TCP客户端

时间:2018-07-03 10:49:45

标签: tcpclient send freertos lwip

我正在寻找一种通过FreeRTOS + lwip的TCP客户端发送数据的方法。

我了解如何发送接收到的信息,例如TCP echo Client, 我找不到在自己喜欢的时间发送的方法。

当我尝试各种方法时,我能够改善连接和接收。

下面是源代码。 •TCP_CET_DAT正在缓冲另一个任务。 •如果无法连接,则将其设置为将端口一一递增。

谢谢您的建议。

static void tcp_client_thread(void *arg)
{
    struct netconn  *conn;
    struct ip_addr  ipaddr;
    unsigned int    port_no = 0xC000;
    err_t           err;

    IP4_ADDR(&ipaddr, 192,168,253,253);                                         // Connection destination IP address

    while (1) {
        conn = netconn_new(NETCONN_TCP);                                        // create new TCP connection handle

        if (conn!= NULL) {
            err = netconn_bind(conn, NULL, port_no);
            if (err == ERR_OK) {
                err = netconn_connect(conn, &ipaddr, 4000);                     // Connection destination port is 4000
                if(err == ERR_OK) {
                    while(1) {
                        tcp_client_serve(conn);
                        if (conn-> pcb.tcp -> state == CLOSE_WAIT) {
                            break;
                        }
                    }
                }
                else {
                    printf("Connect server fail ! \n");
                }
            }
            else {
                printf("can not bind netconn");
            }
        }
        else {
            printf("can not create netconn");
        }
        netconn_delete(conn);                                                   // delete TCP connection handle

        if (port_no < 0xFFFF)   port_no++;                                      // port number is increment
        else                    port_no = 0xC000;
        delaym(1000);
    }
}


void tcp_client_serve(struct netconn *conn)
{
    struct netbuf   *inbuf;
    struct netbuf   *outbuf;
    char            *buf;
    u16_t           buflen;
    int             i;

    // receive
    netconn_recv(conn,&inbuf);
    if (inbuf != NULL) {
        if (netconn_err(conn) == ERR_OK) {
            for (i=0; i<buflen; i++) {
                R_client_buff.buff[R_client_buff.wp] = *buf++;                  // Buffering of received data stored in payload
                if (++R_client_buff.wp > TCP_RBUFF_SIZE)    R_client_buff.wp = 0;
                R_client_buff.count++;
            }
        }
    }
    netbuf_delete(inbuf);

    // send
    outbuf = netbuf_new();
    netbuf_data(outbuf, (void**)&TCP_CET_DAT, &buflen);
    netconn_write(conn, (const unsigned char*)TCP_CET_DAT, (size_t)TCP_CLI_MSG_CNT, NETCONN_NOCOPY);
    netbuf_delete(outbuf);

}

0 个答案:

没有答案