打印

[ZLG-ARM] ZLG/IP实现多任务架构的一些问题,求助!!

[复制链接]
2098|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
xiaomawang2511|  楼主 | 2011-10-11 09:10 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
ARM, ip, lg, ce, AC
现在做的项目要实现一个多任务服务器,能够同时处理多个客户机的处理请求。直接上架构吧。void task0()
{
...
bind();
listen();
while(1)
{
accept();
OSTaskCreateExt(task1,....);
}
}
void task1()
{
recv();
process();
sendback();
}
大概是这个架构的,现在的问题是当我第一个请求来的时候,服务器在处理中,第二个请求来,服务器能接受请求,但是不能处理。起初考虑到的是新建的任务堆栈冲突问题,之后改掉了。后来发现accept()函数中对连接中有连接的情况是直接break;把这个改为return 0xFF。。可是问题仍然无法解决。。求大神高手指点,我知道这个架构肯定有问题,但就是想在这个架构下实现,不知道有什么方法。
PS:我的操作系统是uCOS-II。。。。



相关帖子

沙发
lcq07| | 2011-10-11 13:29 | 只看该作者
本帖最后由 lcq07 于 2011-10-11 13:30 编辑

我对ZLG的IP协议具体实现不太清楚,但常说的TCP服务机制是这样的:listen的目的只是说明该socket是作为一个服务端,但是listen的这个socket并不会参与你最后的recv和send的通信,作为服务端的socket只维护链接的建立,一旦有链接请求listen该socket后listen就会返回,然后调用accept后服务端socket会从他自己维护的链接队列里抽出一个已建立的链接并对该链接赋予一个新的socket句柄然后将这个句柄返回给应用,因此accept成功后会有一个新的socket,而你通信就应该使用这个新的socket句柄来通信

使用特权

评论回复
板凳
xiaomawang2511|  楼主 | 2011-10-11 17:19 | 只看该作者
2# lcq07
恩,思路大概就是这样的,只是ZLG的TCP协议accept返回值是个uint8的值,代表的是socket队列中的序列号,其实也就是新的用于通信的socket

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

4

帖子

1

粉丝