⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 remot-proxy.c

📁 smcp报文处理,阅读您的文件包然后写出其具体功能
💻 C
字号:
#include "remote-proxy.h"/*********************UDP PART*****************************/int create_udp(udp_t *udp,int port){    if((udp->fd= socket(AF_INET,SOCK_DGRAM,0)) < 0)   {      return -1;   }   memset(&udp->sin,0,sizeof(udp->sin));   udp->sin.sin_family = AF_INET;   udp->sin.sin_addr.s_addr = INADDR_ANY;   udp->sin.sin_port = htons(port);   if(bind(udp->fd,(struct sockaddr*)&udp->sin,sizeof(struct sockaddr)) < 0)   {       return -1;   }   return 0;}void udp_set_receiver_addr(udp_t *udp,char *addr,int port){    bzero(&udp->rin, sizeof(udp->rin));    udp->rin.sin_family = AF_INET;    inet_pton(AF_INET, addr, &udp->rin.sin_addr);    udp->rin.sin_port = htons(port);}int udp_send(udp_t *udp, char *message,int length){    assert(message !=NULL);    return sendto(udp->fd, message, length, 0,                        (struct sockaddr*)&udp->rin, sizeof(struct sockaddr));}int udp_recv(udp_t *udp, char *message){    assert(message != NULL);    int sin_size = sizeof(struct sockaddr_in);    memset(message,0,MAX_MSG_LENGTH);    return recvfrom(udp->fd, message, MAX_MSG_LENGTH, 0,               (struct sockaddr*)&udp->rin, &sin_size);}char *udp_get_sender_addr(udp_t *udp){    return inet_ntoa(udp->rin.sin_addr);}int udp_close(udp_t *udp){    if(udp->fd)        return close(udp->fd);    return 0;}/*************************TCP/IP PART************************/int create_tcp_ip(tcp_ip_t *tcp_ip,char *remote_ip,int remote_port){    if ((tcp_ip->he=gethostbyname(remote_ip)) == NULL)    {        return -1;    }    if ((tcp_ip->fd = socket(AF_INET, SOCK_STREAM, 0)) == -1)    {        return -1;    }    tcp_ip->remote_addr.sin_family = AF_INET;    tcp_ip->remote_addr.sin_port = htons(remote_port);    tcp_ip->remote_addr.sin_addr = *((struct in_addr *)tcp_ip->he->h_addr);    memset(&(tcp_ip->remote_addr.sin_zero), '\0', 8);    if (connect(tcp_ip->fd, (struct sockaddr *)&tcp_ip->remote_addr, sizeof(struct sockaddr))            <0)    {        return -1;    }    return 0;}int tcp_ip_send(tcp_ip_t *tcp_ip, char *message){    return(write(tcp_ip->fd,message,strlen(message)));}int tcp_ip_recv(tcp_ip_t *tcp_ip, char *message){    return(read(tcp_ip->fd, message, MAX_MSG_LENGTH));}/**************************SERIAL PORT PART*******************/int create_serial_port(serial_port_t *hcom, char *dev,int speed,         int databits, int stopbits, int parity){    hcom->dev_name = (char *)malloc(strlen(dev) * sizeof(char));    memcpy(hcom->dev_name, dev, strlen(dev));    hcom->speed = speed;    hcom->databits = databits;    hcom->stopbits = stopbits;    hcom->parity = parity;    if( ( hcom->fd = open(dev,O_RDWR|O_NDELAY) ) < 0)        return -1;    if (set_serial_port_speed(hcom) < 0)        return -1;    if (set_serial_port_parity(hcom)<0)        return -1;    return 0;}int set_serial_port_speed(serial_port_t *hcom){    struct termios opt;    tcgetattr(hcom->fd, &opt);    tcflush(hcom->fd, TCIOFLUSH);    cfsetispeed(&opt, hcom->speed);    cfsetospeed(&opt, hcom->speed);    if(tcsetattr(hcom->fd, TCSANOW, &opt)<0)        return -1;    return 0;}/**************************************************************************** * Function: * Input: * Output: * *************************************************************************/int set_serial_port_parity(serial_port_t *hcom){    struct termios options;    if (tcgetattr(hcom->fd, &options) < 0)       return -1;    options.c_cflag &= ~CSIZE;    switch (hcom->databits)    {        case 7:        options.c_cflag |= CS7;        break;        case 8:        options.c_cflag |= CS8;        break;        default:        return -1;    }    switch (hcom->parity)    {        case 'n':        case 'N':        options.c_cflag &= ~PARENB;        options.c_iflag &= ~INPCK;        break;        case 'o':        case 'O':        options.c_cflag |= (PARODD | PARENB);        options.c_iflag |= INPCK;        break;        case 'e':        case 'E':        options.c_cflag |= PARENB;        options.c_cflag &= ~PARODD;        options.c_iflag |= INPCK;        break;        case 'S':        case 's':        options.c_cflag &= ~PARENB;        options.c_cflag &= ~CSTOPB;        break;        default:            return -1;    }    switch (hcom->stopbits)    {        case 1:        options.c_cflag &= ~CSTOPB;        break;        case 2:        options.c_cflag |= CSTOPB;        break;        default:          return -1;    }    /* Set input parity option */    if (hcom->parity != 'n')        options.c_iflag |= INPCK;    options.c_cc[VTIME] = 150; // 15 seconds    options.c_cc[VMIN] = 0;    tcflush(hcom->fd,TCIFLUSH); /* Update the options and do it NOW */    if (tcsetattr(hcom->fd,TCSANOW,&options) != 0)        return -1;    return 0;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -