zoukankan      html  css  js  c++  java
  • UNP习题8.8,UDP/IPv4的数据大小

          在IPv4中,一个datagram 的大小最大为65535(2^16), IPv4的header 为20 bytes,UDP的header 为8 bytes,所以,data的大小最大就为65507 bytes。

          使用Figure 8.7中的Client 的主函数,其中dg_cli 函数重新写了一下,让它可以传送最大的datagram:

    #include        "unp.h"
    #include <netinet/tcp.h>
    
    #define MAXSIZE 65507
    
    void dg_cli(FILE *fp, int sockfd, const SA *pservaddr, socklen_t servlen)
    {
            ssize_t n;
            char sendline[MAXSIZE], recvline[MAXSIZE + 1];
            int size;
            socklen_t len;
    
            Getsockopt(sockfd, SOL_SOCKET, SO_SNDBUF, &size, &len);
            printf("SO_SNDBUF is %d\n", size);
            size = 70000;
            Setsockopt(sockfd, SOL_SOCKET, SO_SNDBUF, &size, sizeof(size));
            Getsockopt(sockfd, SOL_SOCKET, SO_SNDBUF, &size, &len);
            printf("SO_SNDBUF is %d\n", size);
            Setsockopt(sockfd, SOL_SOCKET, SO_RCVBUF, &size, sizeof(size));
    
            while (1) {
                    sleep(2);
    
                    Sendto(sockfd, sendline, MAXSIZE, 0, pservaddr, servlen);
    
                    n = Recvfrom(sockfd, recvline, MAXSIZE, 0, NULL, NULL);
    
                    printf("received number is %d\n", n);
    
                    recvline[n] = 0;        /* null terminate */
                    //Fputs(recvline, stdout);
            }
    }

          通过Setsockopt()函数把SO_SNDBUF 和 SO_RCVBUF都设定为70000,这样就可以传送大的数据包了,不过从server 返回的大小仍旧是4096,说明server端还没有改。用同样的方法,把server 端的dg_echo.c 文件修改一下就可以了。这里的Getsockopt()只是测试用的,没有实际用途。

  • 相关阅读:
    C#添加修改删除文件文件夹大全
    实用且不花哨的js代码大全
    vs2005 2008快捷键
    C#:String.Format数字格式化输出
    获取农历日期
    Vim 常用快捷键
    一个简单的makefile示例及其注释
    nginx源码剖析(1)概要
    利用Vim 打造开发环境(一)>Linux 字符界面 vim的配置
    Ubuntu 9.10设置摘要
  • 原文地址:https://www.cnblogs.com/wangshuo/p/2024177.html
Copyright © 2011-2022 走看看