免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1265 | 回复: 0
打印 上一主题 下一主题

UDP高级技术(并发服务器) [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-03-15 17:10 |只看该作者 |倒序浏览
    通常所见的的TCP服务器都是并发实现的,即服务同时处理多个请求,而不是等待前一个完成再处理下一个请求,这个实现得益于TCP的listen()与connect()的分工处理机制。具体为,服务器监听来自客户的连接,当一个请求到来时,服务器fork()一个子进程,处理该请求,然后父进程继续监听外部请求。
   但在UDP中,没有这种监听和连接机制,所以它必须等待前一处理完成才能继续处理下一个客户的请求。但并不是说UDP实现并发服务器是不可能的,只是与上面的实现稍有不同。原理如下:服务器(知名端口)等待一下客户的到来,当一个客户到来后,记下其IP和port,然后同理,服务器fork一个子进程,建立一个socket再bind一个随机端口,然后建立与客户的连接,并处理该客户的请求。父进程继续循环,等待下一个客户的到来。在tftpd中就是使用这种技术的。
    大概的实现如下:
    for ( ; ; )
    {
           ...
            recvform( &from_addr)
            ...
         
           if (fork() == 0)
                break; //子进程跳出循环   
    }
    //child now here
    peer = socket(AF_INET, SOCK_DGRAM, 0);
    //绑定一个随机端口
    myaddr.sin_port = htons(0);
    bind(peer,(struct sockaddr *)&myaddr, \
                                    sizeof myaddr)
    connect(peer, (struct sockaddr *)&from, \
                                     sizeof from)
    ...
    此外,有关UDP编程的相关技术还有超时重传,包确认等。
   
   
   
               
               
               

本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/11445/showart_85760.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP