zoukankan      html  css  js  c++  java
  • UDP并发技术

    通常所见的的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编程的相关技术还有超时重传,包确认等。

  • 相关阅读:
    解决安装Visual Studio 2012后SQL Server 2008 远程过程调用失败的问题
    解决 Visual Studio 2012 有时不能调试的问题
    WPF实现窗体最小化后小图标在右边任务栏下
    WinForm实现窗体最小化后小图标在右边任务栏下
    C# 开机启动代码
    C# ?? 操作符示例
    WPS页面设置
    PCA(主成分分析)和LDA详解
    MySQL命令行导入sql文件时出现乱码解决方案
    IKAnalyzer 独立使用 配置扩展词典
  • 原文地址:https://www.cnblogs.com/ymy124/p/2438053.html
Copyright © 2011-2022 走看看