免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2144 | 回复: 2
打印 上一主题 下一主题

[C] 服务器端,如何处理 UDP/TCP来的数据... [复制链接]

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2015-04-26 22:21 |只看该作者 |倒序浏览
ARM上用LINUX ,查了说了EPOLL效率不错,于是用了EPOLL,TCP,UDP都是EPOLL


这是TCP \UDP接到PC发来指令后,共同调用的函数,(原来这里封装有出口,也就说,大家都调用这个函数后,返回值都通过这个函数把处理结果,通过参数返回来)

现在,同事,不想通过这个函数把结果返回,而是直接在各个命令处理分支,处理完成后,直接调用TCP/UDP的发送,把结果直接送给PC。。。

那么遇到问题,到各个分支里,如何确定是用UDP 还是TCP 把结果送出去呢?

后面可能还有RS232/RS485,都调用这个处理函数...

处理函数:

  1. void Receive_Process(int conn_fd,unsigned char* buff_r)
复制代码
服务器TCP方式,接到PC命令后,调用函数,是回调方式的:

  1. //处理PC来的命令包//
  2. if(ProcessCallback)
  3. {
  4.         ProcessCallback(events[n].data.fd, send_data_buffer_size_tcp);
  5. }
复制代码
TCP方式在回调函数里,发送结果:

  1. send(conn_fd, buff_w, 5, 0);
复制代码
UDP方式,接受命令后,调用处理函数:

  1.         Receive_Process(ret,recvbuf);
复制代码
UDP 发送数据给PC:
UDP时,FD句柄是个全局变量;TCP时,是通过回调把FD句柄传下去


  1. void udp_send_to_pc(int len,char* buffer)
  2. {
  3.         sendto(new_fd, buffer, len, 0, (struct sockaddr *)&client_addr, cli_len);       
  4.         }
复制代码

论坛徽章:
3
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:49:032015年亚洲杯之中国
日期:2015-04-22 15:52:45
2 [报告]
发表于 2015-04-27 10:01 |只看该作者
本帖最后由 hanxin83 于 2015-04-27 23:07 编辑

这问题问得不好也不通顺. 我来简单说两句.

1. 知道后面用send还是sendto, 这只是问题的一个小点而已. 你事实上想知道你当前处理的是什么请求, 可能因为你的udp和tcp都是处理同样的请求, 所以并没有想到区分fd是哪个端过来的.
2. epoll是支持网络事件发生时, 带过来的是什么东西的, 参看一下epoll_event的结构中的那个联合体.
3. 看问题知道楼主对服务端编程是不太熟的, 你的tcp服务的分包考虑过吗?

不建议你同事自己发, 如果他自己发包EAGAIN了他怎么处理, 每个分支搞一下? 都用公用的吧, 所以我就不给出自己发的建议和解决方案了.
编码再牛B也得按统一的写法写, 何况感觉你同事离牛B还差老远一截.

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
3 [报告]
发表于 2015-04-27 20:21 |只看该作者
谢谢回复呀

可能描述的有问题,,服务器编程也算是吧,以前都是裸奔,也没这么复杂。现在ARM上都跑系统了,也就硬着头皮上了

我也对同事的要求无法理解,沟通过,没效果; 我现在的想法尽量不继续参与进去,我比较委婉的和老大提了,我说手上工作多,忙不过来...

再拉一个人进项目组...

应该不是偷奸耍滑吧,故意逃跑吧 呵呵,大家都坚持的话,就不好进展了,总得有人先妥协。。。

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP