Linuxc之基于UDP通信编程

1.完成基于UDP的客户端和服务器程序编写,要求服务器采用循环方式处理客户端的数据。


Server.c
#include<stdio.h> 
#include<stdlib.h> 
#include<string.h> 
#include<errno.h> 
#include<sys/types.h> 
 
#include<sys/socket.h> 
#include<netdb.h> 
 
int port=8888; 
 
int main() 

    int sockfd; 
    int len; 
    int ret; 
    char buf[256]; 
    struct sockaddr_in adr_inet;//server 
    struct sockaddr_in adr_clnt;//client 
 
    /* 建立socket */ 
    sockfd=socket(AF_INET,SOCK_DGRAM,0); 
    if(sockfd==-1) 
    { 
        perror("create socket error:"); 
        exit(1); 
    } 
     
    /* 建立IP地址 */ 
    adr_inet.sin_family=AF_INET; 
    adr_inet.sin_port=htons(port); 
    adr_inet.sin_addr.s_addr =htonl(INADDR_ANY); 
    //inet_pton(AF_INET, "192.168.1.181", &srvaddr.sin_addr); 
    bzero(&(adr_inet.sin_zero),8); 
    len=sizeof(struct sockaddr_in); 
         
    printf("server : waiting for client...\n"); 
 
    /* 绑定socket */ 
    ret=bind(sockfd, (struct sockaddr *)&adr_inet, sizeof(adr_inet)); 
    if(ret==-1) 
    { 
        perror("bind error"); 
        exit(1); 
    } 
    while(1) 
    { 
        /* 接受传来的信息 */ 
        ret=recvfrom(sockfd,buf,sizeof(buf),0,(struct sockaddr *)&adr_clnt,&len); 
        printf("new connection: %s:%hu\n",inet_ntoa(adr_clnt.sin_addr), ntohs(adr_clnt.sin_port)); 
        if(ret<0) 
        { 
            perror("recvfrom error:"); 
            exit(1); 
        } 
        buf[ret]='\0'; 
        printf("server receive:%s",buf); 
        /* 收到stop字符串,终止连接*/ 
        if(strncmp(buf,"stop",4)==0) 
        { 
            printf("recevice stop ,ending....\n"); 
            break; 
        } 
    } 
    close(sockfd); 
    exit(0); 

Client.c
#include<stdio.h> 
#include<stdlib.h> 
#include<string.h> 
#include<errno.h> 
#include<sys/types.h> 
 
#include<netdb.h> 
#include<sys/socket.h> 
 
int port=8888; 
 
int main() 

    int sockfd; 
    int i=0; 
    int ret; 
    char buf[80],str1[80]; 
    struct sockaddr_in adr_srvr; //the address of server 
    //ILE *fp; 
    /*以只读的方式打开liu文件*/ 
    /*=fopen("test","r");
    if(fp==NULL)
    {
        perror("fopen error:");
        exit(1);
    }*/ 
     
    printf("client :  connecting server ...\n"); 
    /* 建立IP地址 */ 
    adr_srvr.sin_family=AF_INET;//TCP/IP family 
    adr_srvr.sin_port=htons(port);//port 
    //adr_srvr.sin_addr.s_addr = htonl(INADDR_ANY);//local IP 
    inet_pton(AF_INET, "192.168.1.11",&adr_srvr.sin_addr.s_addr); 
    bzero(&(adr_srvr.sin_zero),8); 
 
    sockfd=socket(AF_INET,SOCK_DGRAM,0);//UDP 
    if(sockfd==-1) 
    { 
        perror("create socket error:"); 
        exit(1); 
    } 
 
    /* 读取三行数据,传给udpserver*/ 
    for(i=0;i<3;i++) 
    { 
        fgets(str1,80,stdin); 
        printf("client sending:"); 
        printf("%d:%s",i,str1); 
        sprintf(buf,"%d:%s",i,str1); 
     
        ret=sendto(sockfd,buf,sizeof(buf),0,\ 
            (struct sockaddr *)&adr_srvr, sizeof(adr_srvr)); 
        if(ret<0) 
        { 
            perror("sendto error:"); 
            exit(1); 
        } 
    } 
    sprintf(buf,"stop\n"); //send "stop" to server 
    ret=sendto(sockfd,buf,sizeof(buf), 0, \ 
            (struct sockaddr *)&adr_srvr, sizeof(adr_srvr)); 
    if(ret<0) 
    { 
        perror("sendto error"); 
        exit(1); 
    } 
    //fclose(fp); 
    close(sockfd); 
    exit(0); 
}  


详解请看鄙人上篇博客:点击打开链接
https://blog.csdn.net/qq_37192076/article/details/80778560


猜你喜欢

转载自blog.csdn.net/qq_37192076/article/details/80778626