ARM上用LINUX ,查了说了EPOLL效率不错,于是用了EPOLL,TCP,UDP都是EPOLL 现在,同事,不想通过这个函数把结果返回,而是直接在各个命令处理分支,处理完成后,直接调用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: void udp_send_to_pc(int len,char* buffer) { sendto(new_fd, buffer, len, 0, (struct sockaddr *)&client_addr, cli_len); } |
|
5分 |
getsockopt SO_TYPE 可以获取socket类型,比如SOCK_RAW,SOCK_STREAM,SOCK_DGRAM等等。
|
5分 |
1L +1,
什么时候用TCP,什么时候用UDP这个应该是设计的时候就规定好了吧, 不然为什么要搞两种协议。 如果没有规定,那么这个设计好凌乱 |
10分 |
“直接在各个命令处理分支,处理完成后,直接调用TCP/UDP的发送,把结果直接送给PC。。。”
如果是多线程处理的话,楼主和你的同事们就准备受死吧。 |
我是不想死的,我坚持过我的意见,不建议这么干的,但是,同事年纪大,资格老,老大信他多一点, 所以现在,我选了一个比较折中的办法,让老大拉人进项目中,整个项目我还负责其他部分的工作,借口工作内容多,没精力… |
|
20分 |
区分 udp 与 tcp 的 fd .
1). 1楼 2). 记录 udp 的 fd, 接收/发送数据时判断处理… 3). 用 read() / write() 函数 操作 fd , udp/tcp 通吃 |
20分 |
服务器设计的时候就订好采用何种协议了吧!目前绝大多数都是TCP,用UDP的不多了吧!过程非常像,socket和connect的参数好像有区别
如果同时存在,可以检测报文的协议字段进行区分。但是话又说回来了,同时存在应该是两个服务器进程,不可能是同一个服务器进程服务两种协议吧?! |
我们所谓的服务器,其实就是基于ARM跑linux的设备,当作一个服务器。 设备要与PC等控制端交互…. |
|
10分 |
那应该属于驱动开发的范畴 |
30分 |
告诉你可能的一种死法: |