lwip 如何建立多个连接

我使用的lpc1788+ucos+lwip现在使用官方提供的http服务器和tcp连接,单独使用的时候都可以达到目的,但是我现在想要同时使用这两个连接,做类似路由器的功能... 我使用的lpc1788+ucos+lwip 现在使用官方提供的http服务器和tcp连接,单独使用的时候都可以达到目的,但是我现在想要同时使用这两个连接,做类似路由器的功能,http用来设置网络参数,tcp用来做数据传送。写了两个任务,不同的优先级来完成这个功能,可是当这两个任务建立后,能够ping的通,但是http和tcp的功能都无法使用,请前辈给点指点。 展开
 我来答
天枰琴凤
2015-09-18 · TA获得超过198个赞
知道答主
回答量:391
采纳率:0%
帮助的人:76.2万
展开全部
原始版本的lwip忘光了,提供我修改的,希望有帮助
/*线程空间池*/
typedef struct tagNETTHREAD
{
BOOL state;//状态
int prio; //任务prio
OS_STK threadStk[NET_THREAD_STK_LEN];//堆栈空间
}NETTHREAD, *PNETTHREAD;

/*初始化线程空间*/
static BOOL ThreadSpaceInit(void)
{
int i;

if ((NET_THREAD_MAX_NUM + 8 + 1) > OS_MAX_TASKS){ //线程任务最大数目超过OS_MAX_TASKS

return FALSE;
}

for (i = 0; i < NET_THREAD_MAX_NUM; i ++){

NetThreads.state = THREAD_SPACE_STATE_FREE; //状态为free
NetThreads.prio = NET_RECV_TASK_PRIO - 1 - i; //任务prio分配为tcp主循环任务的上NET_THREAD_MAX_NUM个
}

return TRUE;
}

/*每accept一个socket分配一个线程*/
int NetThreadCreate(void * s)
{
int i;

for (i = 0; i < NET_THREAD_MAX_NUM; i ++){ //搜索线程池,首先释放已经销毁的线程资源

if (NetThreads.state == THREAD_SPACE_STATE_DELING)//线程状态是否为del
if (OSTaskDel(NetThreads.prio) == OS_TASK_DEL_ERR){//若是,判断任务是否已经删除

NetThreads.state = THREAD_SPACE_STATE_FREE;//若任务已经删除,则释放线程资源
}
}

for (i = 0; i < NET_THREAD_MAX_NUM; i ++){//搜索线程池,看是否有可用的线程资源

OS_ENTER_CRITICAL();

if (NetThreads.state == THREAD_SPACE_STATE_FREE){

NetThreads.state = THREAD_SPACE_STATE_USED;

OS_EXIT_CRITICAL();

/*创建线程任务,server是scoket里面的任务服务函数,所以首先需要添加socket里面的域,并在建立服务期线程

connect成功的时候给你赋值*/
if (OSTaskCreate(((PSOCKET)s)->server, s, &NetThreads.threadStk[NET_THREAD_STK_LEN - 1],

NetThreads.prio)){

return (int)&NetThreads; //返回线程id,必须在socket里面在添加一个域用来保存
}

NetThreads.state = THREAD_SPACE_STATE_FREE;

}else{

OS_EXIT_CRITICAL();
}
}

return ERROR;
}

/*销毁一个线程*/
void NetThreadDel(void * s)
{
PNETTHREAD pt;//根据socket得到线程id(pt),

//线程空间的state要设置为del

pt->state = THREAD_SPACE_STATE_DELING;
//在根据次id得到线程任务prio,删除任务

OSTaskDel(pt->prio);
}
Storm代理
2023-07-25 广告
StormProxies是一家国内优质海外HTTP代理商,拥有一个庞大的IP资源池,覆盖200多个地区,IP数量大且匿名度高。其优点还包括超高并发、稳定高效、技术服务等特点,同时提供HTTP、HTTPS以及SOCKS5协议支持。此外,Sto... 点击进入详情页
本回答由Storm代理提供
茶亦爽
2014-03-20
知道答主
回答量:15
采纳率:0%
帮助的人:7.3万
展开全部
用一个进程侦听一次,用两个进程分别accept。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2014-03-07
展开全部
这个你得直接百度
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式