搜到下面的帖子:
http://bbs.csdn.net/topics/370160039?page=1
看到版主qq120848369 贴了代码是C版本,能否工程发个包上来呀 呵呵
最近用ARM开发,以前都裸奔,现在上Linux系统,发现没那么自信,特别是在C板块里,有位大牛说“你们后面等死吧”,心有余悸…
考虑到通信的稳定性对产品的影响,还是再聆听一下大神的教诲
先说一下现在的情况
1 采用EPOLL模式,同时支持UDP和TCP,也就是服务器程序,同时可以处理多客户端(无论是TCP 或UDP协议)的请求交互。
按同事要求,ARM上处理结果,通过TCP/UDP的向PC端(客户端)的发送函数,必须在任意文件中可以随时调用(工程包括N个.c文件,在需要的时候,在某个.c文件就可以调用把处理结果返回给PC端,),原来想无论TCP/UDP来的命令请求,调用一个函数 do(in ,out),通信到此为止,后续和硬件关联的操作结果,通过OUT参数带出来,再发给PC端,但是同事不知出于什么考虑,不予采纳…
现在问题是
TCP 和UDP,单独工作都没问题,但是想同时工作就打架,具体就是,无论客户端哪种协议(UDP也好,TCP也罢,甚至485,232),命令到服务器端后,都调用DO(IN) 函数,在DO函数中解析命令,根据不同命令调用不同函数(函数嵌套可能比较深,也就说一个命令下来,在DO中解析后,根据命令不同,可能调用某个.c文件中的A函数,而A函数可能调用另个.c文件中的B函数),比如到了B函数时,要向PC发数据了,分不清是该用TCP 还是UDP发送…
上面就是目前的主要问题
还有一个问题
就是服务器端不能执行最新的客户端请求指令
目前用测试工具,定时发送指令给服务器,发现服务器不能理解执行最新命令,应该是服务器端为处理完,导致缓冲区存的前面命令继续被执行…
比如:客户端定时发送指令周期 10ms,,而服务器端从接到命令开始,到执行结束需要20ms,,因此1S 客户端发送给服务器的指令包数是:100个,而服务器端只能执行50个,此时来最新的指令(也就停止定时发送的命令,换一个新命令来)不能理解执行,而是把缓冲里的前面50个执行完了,才能执行最新的指令,如何让服务器端在新命令来时,抛弃缓冲里的50个老的命令包…
有兴趣的就指导一下