我正在运行基于LwIP Netconn API的tcpecho示例,来自http://www.st.com/web/en/catalog/tools/FM147/CL1794/SC961/SS1743/LN1734/PF257896的代码,特别是应用笔记UM1713中描述的TCP echo服务器应用程序,以及因为我使用FreeRTOS而在LwIP_UDPTCP_Echo_Server_Netconn_RTOS文件夹下运行固件。 代码如下。
tcpecho服务器已经在一个线程上运行,但是一次只能处理1个客户端,所以我想将其更改为处理多个客户端。到目前为止,我从不同的论坛上读到,解决方案是使用多个线程来处理多个客户端。由于我不是FreeRTOS的专家,有人能说明如何做到这一点吗?
谢谢,
static void tcpecho_thread(void *arg)
{
struct netconn *conn, *newconn;
err_t err, accept_err;
struct netbuf *buf;
void *data;
u16_t len;
LWIP_UNUSED_ARG(arg);
/* Create a new connection identifier. */
conn = netconn_new(NETCONN_TCP);
if (conn!=NULL)
{
/* Bind connection to well known port number 7. */
err = netconn_bind(conn, NULL, 7);
if (err == ERR_OK)
{
/* Tell connection to go into listening mode. */
netconn_listen(conn);
while (1)
{
/* Grab new connection. */
accept_err = netconn_accept(conn, &newconn);
/* Process the new connection. */
if (accept_err == ERR_OK)
{
while (netconn_recv(newconn, &buf) == ERR_OK)
{
do
{
netbuf_data(buf, &data, &len);
netconn_write(newconn, data, len, NETCONN_COPY);
}
while (netbuf_next(buf) >= 0);
netbuf_delete(buf);
}
/* Close connection and discard connection identifier. */
netconn_close(newconn);
netconn_delete(newconn);
}
}
}
else
{
netconn_delete(newconn);
}
}
}
答案 0 :(得分:0)
使用以下API创建多个线程:
sys_thread_new("TCPECHO", tcp_echoserver_netconn_thread, NULL,
TCPECHOSERVER_THREAD_STACKSIZE, TCPECHOSERVER_THREAD_PRIO);
在创建新netconn
之后的每个线程中将其绑定到不同的端口,
例如:
err = netconn_bind(conn, NULL, 80);
err = netconn_bind(conn, NULL, 4000);