• UDP编程之一


    单播模型

    echoserver.c

     

     1 #include <apue.h>
     2 
     3 #define PORT 8080
     4 #define LEN_BUF 255
     5 
     6 void do_business(int sockfd);
     7 
     8 int main(void)
     9 {
    10     //1.创建socket
    11     int sockfd;
    12     if((sockfd = socket(PF_INET,SOCK_DGRAM,0))<0)
    13         ERR("socket failed");
    14 
    15     //2.绑定地址
    16     struct sockaddr_in ipv4;
    17     CLEAR(ipv4);
    18     ipv4.sin_family = AF_INET;
    19     ipv4.sin_port = htons(PORT);                    //NBO
    20     //inet_pton(AF_INET,IP,&ipv4.sin_addr);
    21     ipv4.sin_addr.s_addr = htonl(INADDR_ANY);        //NBO
    22 
    23     if(bind(sockfd,(struct sockaddr*)&ipv4,sizeof(ipv4))<0)    
    24         ERR("bind failed");
    25 
    26     //3.交互
    27     do_business(sockfd);
    28 
    29     //4.关闭
    30     close(sockfd);
    31     return 0;
    32 }
    33 
    34 void do_business(int sockfd)
    35 {
    36     struct sockaddr_in peer;
    37     char buf[LEN_BUF];
    38     socklen_t len = sizeof(peer);
    39     int n;
    40     while(1)
    41     {
    42         if((n = recvfrom(sockfd,buf,sizeof(buf),0,(struct sockaddr*)&peer,&len))<0)
    43             ERR("recv failed");
    44         if(sendto(sockfd,buf,n,0,(struct sockaddr*)&peer,sizeof(peer))<0)
    45             ERR("send failed");
    46     }
    47 }

    echoclient.c

     1 #include <apue.h>
     2 
     3 #define PORT 8080
     4 #define LEN_BUF 255
     5 
     6 void do_business(const char *ipstr,unsigned short port,int sockfd);
     7 
     8 int main(int argc,char **argv)
     9 {
    10     //0.解析命令行参数
    11     if(argc!=3)
    12     {
    13         printf("Usage: %s <ip> <port>
    ",argv[0]);
    14         exit(0);
    15     }
    16     unsigned short port = strtol(argv[2],NULL,10);
    17 
    18     //1.创建socket
    19     int sockfd;
    20     if((sockfd = socket(PF_INET,SOCK_DGRAM,0))<0)
    21         ERR("socket failed");
    22 
    23     //3.交互
    24     do_business(argv[1],port,sockfd);
    25 
    26     //4.关闭
    27     close(sockfd);
    28     return 0;
    29 }
    30 
    31 void do_business(const char *ipstr,unsigned short port,int sockfd)
    32 {
    33     struct sockaddr_in peer;
    34     CLEAR(peer);
    35     peer.sin_family = AF_INET;
    36     peer.sin_port = htons(port);
    37     inet_pton(AF_INET,ipstr,&peer.sin_addr);
    38 
    39     char buf[LEN_BUF],msg[LEN_BUF];
    40     int n;
    41     while(1)
    42     {
    43         printf("shell# ");
    44         fflush(stdout);
    45         scanf("%s",buf);
    46         if(sendto(sockfd,buf,strlen(buf),0,(struct sockaddr*)&peer,sizeof(peer))<0)
    47             ERR("send failed");
    48         if((n = recvfrom(sockfd,msg,LEN_BUF,0,NULL,NULL))<0)
    49             ERR("recv failed");
    50         msg[n] = 0;
    51         printf("%s
    ",msg);
    52     }
    53 }
  • 相关阅读:
    C++ 虚函数表解析
    C#编写简单的聊天程序
    c#事件与委托
    c#文本控件实现换行
    docker 详细安装及问题排查
    hadoop命令行
    Spark中的多线程并发处理
    CDH6.1.0离线安装——笔记
    linux 常用命令
    Rsync 恢复 libselinux.SO.1
  • 原文地址:https://www.cnblogs.com/xiaoying1245970347/p/3791132.html
Copyright © 2020-2023  润新知