• 网络编程udp入门


    老师布置的作业

    echo4_server.c

     1 #include<stdio.h>
     2 #include<stdlib.h>
     3 #include<string.h>
     4 #include<unistd.h>
     5 #include<arpa/inet.h>
     6 #include<sys/socket.h>
     7 
     8 #define BUF_SIZE 10 //一次最大传输大小
     9 void error_handling(char *message); //异常
    10 
    11 int main(int argc,char** argv)
    12 {
    13     int serv_sock,n;
    14     char message[BUF_SIZE*8+3],message1[BUF_SIZE+3]; 
    15     int str_len;
    16     socklen_t clnt_adr_sz;
    17     struct sockaddr_in serv_adr,clnt_adr;
    18     if(argc!=2){
    19         printf("Usage : %s <port>
    ",argv[0]);
    20         exit(1);
    21     }
    22     serv_sock=socket(PF_INET,SOCK_DGRAM,0);
    23     if(serv_sock == -1){
    24         error_handling("UDP socket creattion error");
    25     }
    26 
    27     memset(&serv_adr,0,sizeof(serv_adr));
    28     serv_adr.sin_family=AF_INET;
    29     serv_adr.sin_addr.s_addr=htonl(INADDR_ANY);
    30     serv_adr.sin_port=htons(atoi(argv[1]));
    31 
    32     if(bind(serv_sock,(struct sockaddr*)&serv_adr,sizeof(serv_adr))==-1)
    33         error_handling("bind() error");
    34 
    35     while(1){
    36         clnt_adr_sz=sizeof(clnt_adr);
    37         str_len=recvfrom(serv_sock,message,BUF_SIZE+3,0,(struct sockaddr*)&clnt_adr,&clnt_adr_sz);
    38         message[str_len]=0;
    39         if(message[0]==0){
    40             n=message[1];
    41             message[0]=message[1]=message[2]='1';
    42             message[3]=0;
    43             for(int i=0;i<n;i++){
    44                 str_len=recvfrom(serv_sock,&message1,BUF_SIZE*2,0,(struct sockaddr*)&clnt_adr,&clnt_adr_sz);
    45                 message1[str_len]=0;
    46                 strcat(message,&message1[3]);
    47             }
    48         }
    49         if(strlen(&message[3])-1<=BUF_SIZE){
    50             message[0]=1;
    51             message[2]=strlen(&message[3]);
    52             sendto(serv_sock,message,strlen(&message[3])+3,0,(struct sockaddr*)&clnt_adr,clnt_adr_sz);
    53         }
    54         else{
    55             message[0]=0;
    56             message[1]=strlen(&message[3])/BUF_SIZE;
    57             if(strlen(&message[3])%BUF_SIZE!=0)
    58                 message[1]+=1;
    59             sendto(serv_sock,message,2,0,(struct sockaddr*)&clnt_adr,clnt_adr_sz);
    60             for(int i=0;i*BUF_SIZE<strlen(&message[3]);i++){
    61                 message[i*BUF_SIZE]=2;
    62                 message[i*BUF_SIZE+1]=i+1;
    63                 message[i*BUF_SIZE+2]=BUF_SIZE;
    64                 if((i+1)*BUF_SIZE>strlen(&message[3]))
    65                 message[i*BUF_SIZE+2]=strlen(&message[3])-i*BUF_SIZE;
    66                 sendto(serv_sock,&message[i*BUF_SIZE],message[i*BUF_SIZE+2]+3,0,(struct sockaddr*)&clnt_adr,clnt_adr_sz);
    67             }
    68         }
    69     }
    70     close(serv_sock);
    71     return 0;
    72 }
    73 
    74 void error_handling(char *message)
    75 {
    76     fputs(message,stderr);
    77     fputc('
    ',stderr);
    78     exit(1);
    79 }

    echo4_client.c

     1 #include<stdio.h>
     2 #include<stdlib.h>
     3 #include<string.h>
     4 #include<unistd.h>
     5 #include<arpa/inet.h>
     6 #include<sys/socket.h>
     7 
     8 #define BUF_SIZE 10
     9 
    10 void error_handling(char *message);
    11 
    12 int main(int argc,char** argv)
    13 {
    14     int sock;
    15     char message[BUF_SIZE*8+3],message1[BUF_SIZE+3];
    16     int str_len,n;
    17     socklen_t adr_sz;
    18 
    19     struct sockaddr_in serv_adr,from_adr;
    20     if(argc!=3){
    21         printf("Usage : %s <IP> <port>
    ",argv[0]);
    22         exit(1);
    23     }
    24 
    25     sock=socket(PF_INET,SOCK_DGRAM,0);
    26     if(sock==-1)
    27         error_handling("sock() error");
    28     memset(&serv_adr,0,sizeof(serv_adr));
    29     serv_adr.sin_family=AF_INET;
    30     serv_adr.sin_addr.s_addr=inet_addr(argv[1]);
    31     serv_adr.sin_port=htons(atoi(argv[2]));
    32 
    33     while(1){
    34         int m_len;
    35         fputs("Insert message(q to quit): ",stdout);
    36         fgets(&message[3],sizeof(message)-3,stdin);
    37         if(!strcmp(&message[3],"q
    ")||!strcmp(&message[3],"Q
    "))break;
    38         if(strlen(&message[3])-1<=BUF_SIZE){
    39             message[0]=1;
    40             message[2]=strlen(&message[3]);
    41             sendto(sock,message,strlen(&message[3])+3,0,(struct sockaddr*)&serv_adr,sizeof(serv_adr));
    42         }
    43         else{
    44             message[0]=0;
    45             message[1]=strlen(&message[3])/BUF_SIZE;
    46             if(strlen(&message[3])%BUF_SIZE!=0)
    47                 message[1]+=1;
    48             sendto(sock,message,2,0,(struct sockaddr*)&serv_adr,sizeof(serv_adr));
    49             for(int i=0;i*BUF_SIZE+1<strlen(&message[3]);i++){
    50                 message[i*BUF_SIZE]=2;
    51                 message[i*BUF_SIZE+1]=i+1;
    52                 message[i*BUF_SIZE+2]=BUF_SIZE;
    53                 if((i+1)*BUF_SIZE>=strlen(&message[3]))
    54                 message[i*BUF_SIZE+2]=strlen(&message[3])-1-i*BUF_SIZE;
    55                 sendto(sock,&message[i*BUF_SIZE],message[i*BUF_SIZE+2]+3,0,(struct sockaddr*)&serv_adr,sizeof(serv_adr));
    56             }
    57         }
    58 
    59         str_len=recvfrom(sock,message,BUF_SIZE+3,0,(struct sockaddr*)&from_adr,&adr_sz);
    60         message[str_len]=0;
    61         if(message[0]==0){
    62             n=message[1];
    63             message[0]=message[1]=message[2]='1';
    64             message[3]=0;
    65             for(int i=0;i<n;i++){
    66                 str_len=recvfrom(sock,&message1,BUF_SIZE*2,0,(struct sockaddr*)&from_adr,&adr_sz);
    67                 message1[str_len]=0;
    68                 strcat(message,&message1[3]);
    69                 //printf("%d,%d,%d,%s
    ",message1[0],message1[1],message1[2],&message1[3]);
    70             }
    71         }
    72         printf("Message from server : %s 
    ",&message[3]);
    73     }
    74     close(sock);
    75     return 0;
    76 }
    77 
    78 void error_handling(char *message)
    79 {
    80     fputs(message,stderr);
    81     fputc('
    ',stderr);
    82     exit(1);
    83 }
  • 相关阅读:
    A Simple Problem with Integers poj 3468 多树状数组解决区间修改问题。
    Fliptile 开关问题 poj 3279
    Face The Right Way 一道不错的尺取法和标记法题目。 poj 3276
    Aggressive cows 二分不仅仅是查找
    Cable master(二分题 注意精度)
    B. Pasha and String
    Intervals poj 1201 差分约束系统
    UITextField的快速基本使用代码块
    将UIImage转换成圆形图片image
    color转成image对象
  • 原文地址:https://www.cnblogs.com/kagari/p/8799292.html
Copyright © 2020-2023  润新知