server端
1 #include <string.h> 2 #include <stdio.h> 3 #include <unistd.h> 4 #include <arpa/inet.h> 5 #include <ctype.h> 6 7 #define SERV_PORT 8000 8 9 int main(void) 10 { 11 struct sockaddr_in serv_addr, clie_addr; 12 socklen_t clie_addr_len; 13 int sockfd; 14 char buf[BUFSIZ]; 15 char str[INET_ADDRSTRLEN]; 16 int i, n; 17 18 sockfd = socket(AF_INET, SOCK_DGRAM, 0); //SOCK_DGRAM通过UDP创建套接字 19 20 bzero(&serv_addr, sizeof(serv_addr)); //初始化地址信息 21 serv_addr.sin_family = AF_INET; 22 serv_addr.sin_addr.s_addr = htonl(INADDR_ANY); 23 serv_addr.sin_port = htons(SERV_PORT); 24 25 bind(sockfd, (struct sockaddr *)&serv_addr, sizeof(serv_addr)); //绑定 服务器端 地址 26 27 printf("Accepting connections ... "); 28 while (1) { 29 clie_addr_len = sizeof(clie_addr); 30 n = recvfrom(sockfd, buf, BUFSIZ,0, (struct sockaddr *)&clie_addr, &clie_addr_len); //从sockfd读数据,将数据来源保存在clie_addr中 31 if (n == -1) 32 perror("recvfrom error"); 33 34 printf("received from %s at PORT %d ", 35 inet_ntop(AF_INET, &clie_addr.sin_addr, str, sizeof(str)), 36 ntohs(clie_addr.sin_port)); 37 38 for (i = 0; i < n; i++) 39 buf[i] = toupper(buf[i]); 40 41 n = sendto(sockfd, buf, n, 0, (struct sockaddr *)&clie_addr, sizeof(clie_addr)); //往sockfd写数据,并发送给 clie_addr 42 if (n == -1) 43 perror("sendto error"); 44 } 45 close(sockfd); 46 47 return 0; 48 }
客户端
1 #include <stdio.h> 2 #include <string.h> 3 #include <unistd.h> 4 #include <arpa/inet.h> 5 #include <ctype.h> 6 7 #define SERV_PORT 8000 8 9 int main(int argc, char *argv[]) 10 { 11 struct sockaddr_in servaddr; 12 int sockfd, n; 13 char buf[BUFSIZ]; 14 15 sockfd = socket(AF_INET, SOCK_DGRAM, 0); //SOCK_DGRAM通过 UDP 创建套接字 16 17 bzero(&servaddr, sizeof(servaddr)); 18 servaddr.sin_family = AF_INET; 19 inet_pton(AF_INET, "127.0.0.1", &servaddr.sin_addr); 20 servaddr.sin_port = htons(SERV_PORT); 21 22 while (fgets(buf, BUFSIZ, stdin) != NULL) { 23 n = sendto(sockfd, buf, strlen(buf), 0, (struct sockaddr *)&servaddr, sizeof(servaddr)); //向sockfd写数据,发送给 servaddr 24 if (n == -1) 25 perror("sendto error"); 26 27 n = recvfrom(sockfd, buf, BUFSIZ, 0, NULL, 0); //NULL:不关心对端信息 28 if (n == -1) 29 perror("recvfrom error"); 30 31 write(STDOUT_FILENO, buf, n); 32 } 33 34 close(sockfd); 35 36 return 0; 37 }