加入收藏 | 设为首页 | 会员中心 | 我要投稿 云计算网_泰州站长网 (http://www.0523zz.com/)- 视觉智能、AI应用、CDN、行业物联网、智能数字人!
当前位置: 首页 > 服务器 > 搭建环境 > Unix > 正文

UNIX网络编程:UDP回射服务器程序(初级版本)及漏洞分析

发布时间:2016-09-10 12:50:35 所属栏目:Unix 来源:站长网
导读:该函数提供的是一个迭代服务器,而不是像TCP服务器那样可以提供一个并发服务器。其中没有对fork的调用,因此单个服务器进程就得处理所有客户。一般来说,大多数
副标题[/!--empirenews.page--]

该函数提供的是一个迭代服务器,而不是像TCP服务器那样可以提供一个并发服务器。其中没有对fork的调用,因此单个服务器进程就得处理所有客户。一般来说,大多数TCP服务器是并发的,而大多数UDP服务器是迭代的。

对于本套接字,UDP层中隐含有排队发生。事实上每个UDP套接字都有一个接收缓冲区,到达该套接字的每个数据报都进入这个套接字接收缓冲区。当进程调用recvfrom时,缓冲区中的下一个数据报以FIFO(先入先出)顺序返回给进程。

服务器程序:

#include<stdio.h>  
#include<stdlib.h>  
#include<unistd.h>  
#include<errno.h>  
#include<sys/types.h>  
#include<sys/socket.h>  
#include<netinet/in.h>  
#include<string.h>  
      
#define SERV_PORT 3333  
#define MAXLINE 1024  
      
#define ERR_EXIT(m) 
    do { 
        perror(m); 
        exit(EXIT_FAILURE); 
    } while (0)  
      
typedef struct sockaddr SA;  
void dg_echo(int sockfd, SA *pcliaddr, socklen_t clilen)  
{  
    int         n;  
    socklen_t   len;  
    char        mesg[MAXLINE];  
      
    for ( ; ; ) {  
        len = clilen;  
        n = recvfrom(sockfd, mesg, MAXLINE, 0, pcliaddr, &len);  
      
        sendto(sockfd, mesg, n, 0, pcliaddr, len);  
    }  
}  
      
      
int
main(int argc, char **argv)  
{  
    int                 sockfd;  
    struct sockaddr_in  servaddr, cliaddr;  
      
    sockfd = socket(AF_INET, SOCK_DGRAM, 0);  
      
    bzero(&servaddr, sizeof(servaddr));  
    servaddr.sin_family      = AF_INET;  
    servaddr.sin_addr.s_addr = htonl(INADDR_ANY);  
    servaddr.sin_port        = htons(SERV_PORT);  
      
    bind(sockfd, (SA *) &servaddr, sizeof(servaddr));  
      
    dg_echo(sockfd, (SA *) &cliaddr, sizeof(cliaddr));  
}

查看本栏目更多精彩内容:http://www.bianceng.cn/OS/unix/

(编辑:云计算网_泰州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

推荐文章
    热点阅读