- 論壇徽章:
- 1
|
ARM上用LINUX ,查了說了EPOLL效率不錯(cuò),于是用了EPOLL,TCP,UDP都是EPOLL
這是TCP \UDP接到PC發(fā)來指令后,共同調(diào)用的函數(shù),(原來這里封裝有出口,也就說,大家都調(diào)用這個(gè)函數(shù)后,返回值都通過這個(gè)函數(shù)把處理結(jié)果,通過參數(shù)返回來)
現(xiàn)在,同事,不想通過這個(gè)函數(shù)把結(jié)果返回,而是直接在各個(gè)命令處理分支,處理完成后,直接調(diào)用TCP/UDP的發(fā)送,把結(jié)果直接送給PC。。。
那么遇到問題,到各個(gè)分支里,如何確定是用UDP 還是TCP 把結(jié)果送出去呢?
后面可能還有RS232/RS485,都調(diào)用這個(gè)處理函數(shù)...
處理函數(shù):
- void Receive_Process(int conn_fd,unsigned char* buff_r)
復(fù)制代碼 服務(wù)器TCP方式,接到PC命令后,調(diào)用函數(shù),是回調(diào)方式的:
- //處理PC來的命令包//
- if(ProcessCallback)
- {
- ProcessCallback(events[n].data.fd, send_data_buffer_size_tcp);
- }
復(fù)制代碼 TCP方式在回調(diào)函數(shù)里,發(fā)送結(jié)果:
- send(conn_fd, buff_w, 5, 0);
復(fù)制代碼 UDP方式,接受命令后,調(diào)用處理函數(shù):
- Receive_Process(ret,recvbuf);
復(fù)制代碼 UDP 發(fā)送數(shù)據(jù)給PC:
UDP時(shí),F(xiàn)D句柄是個(gè)全局變量;TCP時(shí),是通過回調(diào)把FD句柄傳下去
- void udp_send_to_pc(int len,char* buffer)
- {
- sendto(new_fd, buffer, len, 0, (struct sockaddr *)&client_addr, cli_len);
- }
復(fù)制代碼 |
|