• 20191323王予涵第13章学习笔记


    20191323王予涵第13章学习笔记

    TCP/IP

    知识点总结及归纳

    UDP(尽最大努力传输)

    UDP(用户数据报协议)在IP上运行,用于发送/接收数据报。与IP类似,UDP不能保证可靠性,但是快速高效。它可用于可靠性不重要的情况。用户可以使用ping命令探测目标主机。
    ping是一个向目标主机发送带时间戳UDP包的应用程序。接收到一个pinging数据包后,目标主机将带有时间戳的UDP包回送给发送者,让发送者可以计算和显示往返时间。 如果目标主机不存在或宕机,当TTL减小为0时,路由器将会丢弃pinging UDP数据包。在这种情况下,用户会发现目标主机没有任何响应。用户可以尝试再次ping,或者断定目标主机宕机。在这种情况下,最好使用UDP,因为不要求可靠性。

    TCP(可靠传输)

    TCP(传输控制协议)是一种面向连接的协议,用于发送/接收数据流。TCP也可在IP上运行,但它保证了可靠的数据传输。通常,UDP类似于发送邮件的USPS,而TCP类似于电话连接。

    网络序主机序

    计算机可以使用大端字节序,也可以使用小端字节序。在互联网上,数据始终按网络序排列,这是大端。在小端机器上,例如基于Intel x86的PC, htons()、htonl()、ntohs()、 ntohl()等库函数,可在主机序和网络序之间转换数据。

    套接字编程

    数据结构:

    #include <sys/socket.h>
    #include <netinet/ip.h>
    #include <arpa/inet.h>
    
    struct sockaddr_in {
        sa_family_t sin_family; // AF_INET for TCP/IP
        in_port_t sin_port;// port number
        struct in_addr sin_addr;// IP address
    };// internet address 
    struct in_addr {// internet address 
        uint32_ts_addr;// IP address in network byte order
    };
    
    • TCP/IP 网络的 sin_family 始终设置为 AF_INET;
    • sin_port包含按网络字节顺序排列的端口号;
    • sin addr是按网络字节顺序排列的主机IP地址。

    二、实践基于华为服务器UDP通信

    代码

    “client.c"

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <sys/socket.h>
    #include <netinet/ip.h>
    #include <arpa/inet.h>
    
    #define BUFLEN 256
    #define SERVER_PORT 8888
    #define SERVER_HOST "121.37.93.202"
    
    char line[BUFLEN];
    struct sockaddr_in server;
    int sock, rlen, slen = sizeof(server);
    
    int main()
    {
        printf("creat a udp socket\n");
        sock = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
    
        printf("fill me with server address and port numbers\n");
        memset((char *)&server, 0, sizeof(server));
        server.sin_family = AF_INET;
        server.sin_port = htons(SERVER_PORT);
        //inet_aton(SERVER_HOST, &server.sin_addr);
        server.sin_addr.s_addr = inet_addr(SERVER_HOST);
    
       while(1)
       {
           printf("enter a line:");
           fgets(line, BUFLEN,stdin);
           line[strlen(line)-1] = 0;
           printf("send line to server\n");
           sendto(sock,line, strlen(line),0,(struct sockaddr *)&server,slen);
           memset(line, 0, BUFLEN);
           printf("try to receive\n");
           rlen = recvfrom(sock,line,BUFLEN,0,(struct sockaddr *)&server, &slen);
           printf("rlen=%d: line=%s\n",rlen,line);
       }
    }
    

    "server.c"

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <sys/socket.h>
    #include <netinet/ip.h>
    #include <arpa/inet.h>
    
    #define BUFLEN 256
    #define PORT 8888
    
    char line[BUFLEN];
    struct sockaddr_in me, client;
    int sock, rlen, clen = sizeof(client);
    
    int main()
    {
        printf("creat a udp socket\n");
        sock = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
    
        printf("fill me with server address and port numbers\n");
        memset((char *)&me, 0, sizeof(me));
        me.sin_family = AF_INET;
        me.sin_port = htons(PORT);
    
        //inet_aton("121.37.93.202", &me.sin_addr);
        me.sin_addr.s_addr = htonl(INADDR_ANY);
    
        printf("bind socket to server IP and port\n");
        bind(sock, (struct sockaddr*)&me, sizeof(me));
    
        printf("wait for data\n");
        while(1)
        {
            memset(line, 0, BUFLEN);
            printf("waiting for data\n");
            rlen = recvfrom(sock, line,BUFLEN,0,(struct sockaddr *)&client, &clen);
            printf("recive from [host:prot]= [%s:%d]\n",inet_ntoa(client.sin_addr), ntohs(client.sin_port));
            printf("rlen=%d: line=%s\n",rlen,line);
            printf("send reply\n");
            sendto(sock, line, rlen, 0, (struct sockaddr*)&client, clen);
    
        }
    }
    

    结果截图:

  • 相关阅读:
    八月第二周学习心得
    七月第二周学习心得
    八月第一周学习
    八月第三周学习心得
    7月第一周学习心得
    php mysql_error()函数用法详解
    php mysql_select_db
    php中的释放“语句”unset和释放“函数”mysql_free_result()
    JavaScript]Cookie详解(转)
    Javascript类型转换的规则
  • 原文地址:https://www.cnblogs.com/WANGYUHAN/p/15616835.html
Copyright © 2020-2023  润新知