Я ищу способ отправки данных клиентом TCP по FreeRTOS + lwip.
Я вижу, как отправлять полученную информацию, такую как 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);
}