1. 程式人生 > >最簡單伺服器程式UDP(Linux)

最簡單伺服器程式UDP(Linux)

一.伺服器程式

  1 #include <stdio.h>
  2 #include <stdlib.h>
  3 #include <string.h>
  4 #include <unistd.h>
  5 #include <ctype.h>
  6 #include <sys/types.h>
  7 #include <sys/socket.h>
  8 #include <netinet/in.h>
  9 #include <arpa/inet.h>
 10 
 11 #define MAXLINE 80
 12 #define SERV_PORT 6666
 13 
 14 int main()
 15 {
 16     struct sockaddr_in servaddr, cliaddr;
 17     socklen_t cliaddr_len;
 18     int sockfd;
 19     char buf[MAXLINE];
 20     char str[INET_ADDRSTRLEN];
 21     int i, len;
 22 
 23     sockfd = socket(AF_INET, SOCK_DGRAM, 0);
 24 
 25     bzero(&servaddr, sizeof(servaddr));
 26     servaddr.sin_family = AF_INET;
 27     servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
 28     servaddr.sin_port = htons(SERV_PORT);
 29 
 30     bind(sockfd, (struct sockaddr*)&servaddr, sizeof(servaddr));
 31     printf("Accepting connections ...\n");
 32 
 33     while(1)
 34     {
 35         cliaddr_len = sizeof(cliaddr);
 36         len = recvfrom(sockfd, buf, MAXLINE, 0, (struct sockaddr*)&cliaddr, &cliaddr_l
    en);
 37         if(len == -1)
 38         {
 39             printf("recvfrom error\n");
 40         }
 41         printf("received from %s at PORT %d\n",
 42                         inet_ntop(AF_INET, &cliaddr.sin_addr, str, sizeof(str)),
 43                         ntohs(cliaddr.sin_port));
 44         for(i = 0; i < len; i++)
 45         {
 46             buf[i] = toupper(buf[i]);
 47         }
 48         len = sendto(sockfd, buf, len, 0, (struct sockaddr*)&cliaddr, sizeof(cliaddr))
    ;
 49         if(len == -1)
 50         {
 51             printf("sendto error!\n");
 52         }
 53     }
 54     close(sockfd);
 55     return 0;
 56 }

二.客戶端程式

 1 #include <stdio.h>
  2 #include <stdlib.h>
  3 #include <string.h>
  4 #include <ctype.h>
  5 #include <sys/types.h>
  6 #include <sys/socket.h>
  7 #include <unistd.h>
  8 #include <netinet/in.h>
  9 #include <arpa/inet.h>
 10 
 11 #define MAXLINE 80
 12 #define SERV_PORT 6666
 13 #define IP "127.0.0.1"
 14 
 15 int main(int argc, char* argv[])
 16 {
 17     struct sockaddr_in servaddr;
 18     int sockfd, n;
 19     char buf[MAXLINE];
 20 
 21     sockfd = socket(AF_INET, SOCK_DGRAM, 0);
 22 
 23     bzero(&servaddr, sizeof(servaddr));
 24     servaddr.sin_family = AF_INET;
 25     inet_pton(AF_INET, IP, &servaddr.sin_addr);
 26     servaddr.sin_port = htons(SERV_PORT);
 27 
 28     while(fgets(buf, MAXLINE, stdin) != NULL)
 29     {
 30         n = sendto(sockfd, buf, strlen(buf), 0, (struct sockaddr*)&servaddr, sizeof(se
    rvaddr));
 31         if(n == -1)
 32         {
 33             printf("sendto error!\n");
 34         }
 35         n = recvfrom(sockfd, buf, MAXLINE, 0, NULL, 0);
 36         if(n == -1)
 37         {
 38             printf("recvfrom error!\n");
 39         }
 40         write(STDOUT_FILENO, buf, n);
 41     }
 42     close(sockfd);
 43     return 0;
 44 }