- 论坛徽章:
- 1
|
ARM上用LINUX ,查了说了EPOLL效率不错,于是用了EPOLL,TCP,UDP都是EPOLL
这是TCP \UDP接到PC发来指令后,共同调用的函数,(原来这里封装有出口,也就说,大家都调用这个函数后,返回值都通过这个函数把处理结果,通过参数返回来)
现在,同事,不想通过这个函数把结果返回,而是直接在各个命令处理分支,处理完成后,直接调用TCP/UDP的发送,把结果直接送给PC。。。
那么遇到问题,到各个分支里,如何确定是用UDP 还是TCP 把结果送出去呢?
后面可能还有RS232/RS485,都调用这个处理函数...
处理函数:
- void Receive_Process(int conn_fd,unsigned char* buff_r)
复制代码 服务器TCP方式,接到PC命令后,调用函数,是回调方式的:
- //处理PC来的命令包//
- if(ProcessCallback)
- {
- ProcessCallback(events[n].data.fd, send_data_buffer_size_tcp);
- }
复制代码 TCP方式在回调函数里,发送结果:
- send(conn_fd, buff_w, 5, 0);
复制代码 UDP方式,接受命令后,调用处理函数:
- Receive_Process(ret,recvbuf);
复制代码 UDP 发送数据给PC:
UDP时,FD句柄是个全局变量;TCP时,是通过回调把FD句柄传下去
- void udp_send_to_pc(int len,char* buffer)
- {
- sendto(new_fd, buffer, len, 0, (struct sockaddr *)&client_addr, cli_len);
- }
复制代码 |
|