zoukankan      html  css  js  c++  java
  • UDP通讯程序设计---6

    一、函数化

     

    1.1服务器使用的函数

      创建socket----->socket

      绑定地址-------->bind

      接受数据-------->recvfrom

      发送数据-------->sendto

      结束连接-------->close

    1.2客户机使用函数

      创建套接字------>socket

      发送数据-------->sento

      接受数据-------->recvfrom

      结束连接-------->close

    二、函数学习  

    2.1 发送数据sendto

    2.1.1包含头文件

      #include <sys/types.h>
      #include <sys/socket.h>

    2.1.2函数原型

      ssize_t sendto(int sockfd, const void *buf, size_t len, int flags,
    const struct sockaddr *dest_addr, socklen_t addrlen);

    2.1.3函数参数

      sockfd:创建的套接字

      *buf:要发送的数据地址

      len:数据长度

      flags:标识符

      dest_addr:目的机地址

      addrlen:地址长度

    2.1.4返回值

      实际发送的数据量

    2.2接收数据recvfrom

    2.2.1包含头文件

      #include <sys/types.h>
      #include <sys/socket.h>

    2.2.2函数原型

      ssize_t recvfrom(int sockfd, void *buf, size_t len, int flags,
        struct sockaddr *src_addr, socklen_t *addrlen);

    2.2.3函数参数

      sockfd:创建的套接字

      *buf:数据存放的地址

      len:数据长度

      flags:标识符

      dest_addr:数据来源方方的地址

      addrlen:地址长度的指针

    2.2.4返回值

      以字节计数的消息长度,若无可用消息或对方已经按序结束则返回0,若出错则返回-1

    三、编写服务器代码

      touch  udp_server.c

      chmod 777 udp_server.c

    复制代码
     1 #include <stdio.h>
     2 #include <string.h>
     3 #include <sys/socket.h>
     4 #include <netinet/in.h>
     5 
     6 
     7 #define portnum 8888
     8 #define msg_size 128
     9 int main()
    10 {
    11     int sockfd;
    12     char buffer[msg_size];
    13     struct sockaddr_in server_addr;
    14     struct sockaddr_in client_addr;
    15     int addrlen;
    16     int n;
    17     //1.创建套接字
    18     sockfd = socket(AF_INET,SOCK_DGRAM,0);
    19     
    20     //2.绑定地址
    21     bzero(&server_addr,sizeof(struct sockaddr_in));
    22     server_addr.sin_family = AF_INET;
    23     server_addr.sin_port = htons(portnum);
    24     server_addr.sin_addr.s_addr = htonl(INADDR_ANY);
    25     bind(sockfd,(struct sockaddr *)(&server_addr),sizeof(struct sockaddr));
    26     
    27     //3.接受数据
    28     while(1)
    29     {
    30         addrlen = sizeof(struct sockaddr);   //获取数据长度地址
    31         bzero(buffer,sizeof(buffer));
    32         n = recvfrom(sockfd,buffer,msg_size,0,(struct sockaddr *)(&client_addr),&addrlen);
    33         buffer[n] = 0;
    34         printf("server received :%s
    ",buffer);
    35     }
    36     //4.结束连接
    37     close(sockfd);
    38     return 0;
    39 }
    复制代码

    编译运行:

    四、编写客户机代码

      touch udp_client,c

      chmod 777 udp_client.c

    复制代码
    #include <stdio.h>
    #include <string.h>
    #include <sys/socket.h>
    #include <netinet/in.h>
    
    
    #define buffer_size 128
    #define portnum 8888
    int main(int argc,char **argv[])
    {
        int sockfd;
        char buffer[buffer_size];
        struct sockaddr_in server_addr;
        
        if(argc != 2)
        {
            printf("usage: %s server_ip
    ",argv[0]);
            exit(1);
        }
        //1.创建套接字
        sockfd = socket(AF_INET,SOCK_DGRAM,0);
        
        //初始化服务器地址
        bzero(&server_addr,sizeof(struct sockaddr_in));
        server_addr.sin_family = AF_INET;
        server_addr.sin_port = htons(portnum);
        inet_aton(argv[1],&server_addr.sin_addr);
        
        //2.发送数据
        while(1)
        {
            printf("please input char: 
    "); 
            fgets(buffer,buffer_size,stdin);
            sendto(sockfd,buffer,strlen(buffer),0,(struct sockaddr *)(&server_addr),sizeof(struct sockaddr));
            bzero(buffer,buffer_size);
        }
        
        //3.关闭连接
        close(sockfd);
        return 0;
        
    }
    复制代码

    编译运行:

    4.1则可以看到服务器运行结果

  • 相关阅读:
    一起学windows phone7开发(二十四. Task 补遗)
    一起学windows phone7开发(二十.一 正式版中新增的 Panorama 和 Pivot Project)
    一起学WP7 XNA游戏开发(四. Input)
    一起学WP7 XNA游戏开发(五. Sound)
    一起学windows phone7开发(二十一.三 Map 控件深入学习)
    Daisy.wp7.Controls自定义的控件库
    一起学windows phone7开发(二十二.使用系统资源)
    一起学习Windows Phone7开发(二十三 Windows Phone7 Toolkit 补遗)
    一起学windows phone7开发(二十一.一 Silverlight bing map控件与 Pone7 map控件的比较)
    第一次试验报告
  • 原文地址:https://www.cnblogs.com/zxouxuewei/p/5380632.html
Copyright © 2011-2022 走看看