我正在寻找一种通过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);
}