基于UDP简单聊天程序

    技术2022-05-20  41

    /*server.c*/

     

     

    #include <stdlib.h>#include <stdio.h>#include <errno.h>#include <string.h>#include <unistd.h>#include <netdb.h>#include <sys/socket.h>#include <netinet/in.h>#include <sys/types.h>#include <arpa/inet.h>

    #define SERVER_PORT 8888 #define MAX_MSG_SIZE 1024

    void udps_respon(int sockfd) {  int addrlen,n; struct sockaddr_in client; char msg[MAX_MSG_SIZE]; char buffer[MAX_MSG_SIZE]; int len; len=sizeof(struct sockaddr_in);    while(1)    { /* 浠庣綉缁滀笂璇?骞跺啓鍒扮綉缁滀笂 */   bzero(msg,sizeof(msg)); // 鍒濆鍖?娓呴浂

      addrlen = sizeof(struct sockaddr);   printf("h1_1/n");  n=recvfrom(sockfd,msg,sizeof(msg),0,(struct sockaddr *)&client,&addrlen); // 浠庡鎴风鎺ユ敹娑堟伅  msg[n]='/0';   printf("h1_2/n");    /* 鏄剧ず鏈嶅姟绔凡缁忔敹鍒颁簡淇℃伅 */     fprintf(stdout,"Server have received %s",msg); // 鏄剧ず娑堟伅     /* 浠庨敭鐩樿鍏?鍐欏埌鏈嶅姟绔?*/      bzero(buffer,MAX_MSG_SIZE);    printf("Please input char:");   fgets(buffer,sizeof(buffer),stdin);    sendto(sockfd,buffer,sizeof(buffer),0,(struct sockaddr *)&client,len);   } }

    int main(){ int sockfd;  struct sockaddr_in addr;

     /* 鏈嶅姟鍣ㄧ寮€濮嬪缓绔媠ocket鎻忚堪绗?*/  sockfd=socket(AF_INET,SOCK_DGRAM,0);  if(sockfd<0)      {     fprintf(stderr,"Socket Error:%s/n",strerror(errno));     exit(1);   }

     /* 鏈嶅姟鍣ㄧ濉厖 sockaddr缁撴瀯 */  bzero(&addr,sizeof(struct sockaddr_in));  addr.sin_family=AF_INET;  addr.sin_addr.s_addr=htonl(INADDR_ANY);     addr.sin_port=htons(SERVER_PORT);

     /* 鎹嗙粦sockfd鎻忚堪绗?*/  if(bind(sockfd,(struct sockaddr *)&addr,sizeof(struct sockaddr_in))<0)   {      fprintf(stderr,"Bind Error:%s/n",strerror(errno));      exit(1);   }

     udps_respon(sockfd); // 杩涜璇诲啓鎿嶄綔 close(sockfd);}

     

     

     

     

     

     

     

    /*client*/

     

     

    #include <stdlib.h>#include <stdio.h>#include <errno.h>#include <string.h>#include <unistd.h>#include <netdb.h>#include <sys/socket.h>#include <netinet/in.h>#include <sys/types.h>#include <arpa/inet.h>

    #define SERVER_PORT 8888 #define MAX_BUF_SIZE 1024

     

    void udpc_requ(int sockfd1, struct sockaddr_in addr1,int len) {  char buffer[10240];  char msg[1024]; int addrlen; int n; int nd; while(1)    {  /* 浠庨敭鐩樿鍏?鍐欏埌鏈嶅姟绔?*/    bzero(buffer,MAX_BUF_SIZE);   printf("Please input char:");   scanf("%s",buffer);   nd=sendto(sockfd1,buffer,sizeof(buffer),0,(struct sockaddr *)&addr1,len);    printf("h2=%d/n",nd);       bzero(msg,sizeof(msg)); // 鍒濆鍖?娓呴浂  addrlen = sizeof(struct sockaddr);   n=recvfrom(sockfd1,msg,MAX_BUF_SIZE,0,(struct sockaddr *)&addr1,&addrlen); // 浠庡鎴风鎺ユ敹娑堟伅  //msg[n]='/0';     fprintf(stdout,"CLIENT  have received %s",msg); // 鏄剧ず娑堟伅 } }

    int main(int argc,char **argv){ int sockfd;     struct sockaddr_in addr;

     if(argc!=2)     {     fprintf(stderr,"Usage:%s server_ip/n",argv[0]);     exit(1);     }

     /* 寤虹珛 sockfd鎻忚堪绗?*/   sockfd=socket(AF_INET,SOCK_DGRAM,0); if(sockfd<0)   {    fprintf(stderr,"Socket Error:%s/n",strerror(errno));    exit(1);   }  /* 濉厖鏈嶅姟绔殑璧勬枡 */  bzero(&addr,sizeof(struct sockaddr_in));  addr.sin_family=AF_INET;  addr.sin_port=htons(SERVER_PORT);    if(inet_aton(argv[1],&addr.sin_addr)<0)  /*inet_aton鍑芥暟鐢ㄤ簬鎶婂瓧绗︿覆鍨嬬殑IP鍦板潃杞寲鎴愮綉缁?杩涘埗鏁板瓧*/   {    fprintf(stderr,"Ip error:%s/n",strerror(errno));    exit(1);                  }

     udpc_requ(sockfd,addr,sizeof(struct sockaddr_in)); // 杩涜璇诲啓鎿嶄綔 close(sockfd); }


    最新回复(0)