📄 channel.c
字号:
/***************************************************************************** FileName: channel.c* Revision: 2008/07/25* Author: Du Biao***************************************************************************** DESCRIPTION: Init,read,write and close the UDP socket chanel** COPYRIGHT: (C) HEBEI FAR-EAST HARRIS COMMUNICATIONS COMPANY LTD.* HISTORY: 08/07/25: Initial verison by Du Biao**/#include <stdio.h>#include <stdlib.h>#include <sys/types.h>#include <sys/socket.h>#include <netinet/in.h>#include <fcntl.h>#include <termios.h>#include <unistd.h>#include <strings.h>#include "../inc/version.h"#include "../inc/gendef.h"#include "../inc/msgpkt.h"#include "../inc/channel.h"//#undef CHANNEL_DEBUG#define CHANNEL_DEBUG#ifdef CHANNEL_DEBUG #define CHANNEL_DPRINTF( x... ) printf("CHANNEL: \t" ##x)#else #define CHANNEL_DPRINTF( x... )#endif/************************************************************************* GLOBAL DEFINITIONS**************************************************************************/struct sockaddr gPeerAddr; /* my address information *//************************************************************************* CHN_Open*************************************************************************FUNCTION: Open udp socketINPUTS: port: UDP listen portOUTPUTS: noneRETURN: dev handle, -1 is error**/int CHN_Open(int port){ int ret; int sock_fd; struct sockaddr_in my_addr; /* my address information */ if((sock_fd = socket(AF_INET,SOCK_DGRAM,0))== -1) { perror("socket"); return -1; } CHANNEL_DPRINTF("CHN_Open,socket success! \n"); /*set paramters of the sockaddr_in struct paramter my_addr*/ my_addr.sin_family = AF_INET; my_addr.sin_port = htons(port); //my_addr.sin_port = port; my_addr.sin_addr.s_addr = INADDR_ANY; bzero(&(my_addr.sin_zero),8); if((ret = bind(sock_fd,(struct sockaddr *)&my_addr,sizeof(struct sockaddr)))== -1) { perror("bind"); return -1; } CHANNEL_DPRINTF("CHN_Open,bind success!\n"); return sock_fd;}/************************************************************************* CHN_Send*************************************************************************FUNCTION: Send data to udp portINPUTS: dev:device handle; buf:buffer to write buf_len:len of data to writeOUTPUTS: noneRETURN: data len sent**/int CHN_Send(int dev,U8* buf,U32 buf_len){ int ret; CHANNEL_DPRINTF("CHN_Send buf[2] is %2x,buf[3] is %2x \n", buf[2],buf[3]);#if 1 if((ret = sendto(dev, buf, buf_len, 0, &gPeerAddr, sizeof(gPeerAddr)))== -1) { perror("send"); return -1; }#endif CHANNEL_DPRINTF("CHN_Send,send success!\n"); return ret;}/************************************************************************* CHN_Recv*************************************************************************FUNCTION: read data from udp portINPUTS: dev:device handle; buf:buffer to save read data buf_len:len of data to readOUTPUTS: noneRETURN: data len read**/int CHN_Recv(int dev,U8* buf,U32 buf_len){ int ret; int recv_len; recv_len = sizeof(gPeerAddr);#if 1 if((ret = recvfrom(dev, buf, buf_len, 0, &gPeerAddr, &recv_len))== -1) { perror("receive\n"); return -1; }#endif //CHANNEL_DPRINTF("CHN_Recv:receive buf is %s\n",buf); CHANNEL_DPRINTF("CHN_Recv,read success!\n"); return ret;}/************************************************************************* CHN_Close*************************************************************************FUNCTION: close udp portINPUTS: dev:device handleOUTPUTS: noneRETURN: 0 is ok, -1 is error**/int CHN_Close(int dev){ int ret; if((ret = close(dev))== -1); { perror("close"); return -1; } CHANNEL_DPRINTF("CHN_Close,close success!\n"); return ret;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -